typescript - Vad är skillnaden mellan att en JSON-nyckel omges av dubbla citattecken "" och att den inte har några dubbla citattecken alls?
Här är mitt TypeScript-objekt:
{
first_name:"test",
last_name: "test",
birthdate:"2018-01-08T16:00:00.000Z",
contactNumber: "12312312312",
email:"[email ",
username:user."test",
password: user."test"
}
VS
{
"first_name":"test",
"last_name": "tests",
"birthdate":"2018-01-08T16:00:00.000Z",
"contactNumber": "31231232131",
"email":"[email ",
"username":"test",
"password":"test1234"
}
Varje gång jag skickar det via HTTP POST med Angular 5. Finns det alltid ett fel på min API-sida.
Här är felet.
Otillåtna parametrar: :first_name, :last_name, :birthdate, :contactNumber, :user
När jag lägger till dubbla citattecken runt alla nycklar fungerar det bra.
Svar #1
Enligt JSON-specifikationerna (se http://json.org) måste du omsluta nycklarna med dubbla citattecken.
Ett JSON-objekt innehåller en uppsättning sträng-/värdepar, och strängar definieras på följande sätt:
En sträng är en sekvens av noll eller fler Unicode-tecken, omslutna av dubbla citattecken, och använder backslash-escape-sekvenser.
Det är så att du kan använda reserverade nyckelord som nycklar, som i
{
"function": "sqrt"
}
I princip är “JSON”-kod där nyckeln inte omges av dubbla citattecken inte giltig JSON.
Svar #2
Svaret finns i den första teckningen på JSON-webbplatsen: objektnycklar måste kodas som strängar i JSON. Om de är identifierare (inte strängar) då är det inte JSON utan ett bokstavligt Javascript-objekt.
Det verkar som Ruby-biblioteket som bearbetar API-förfrågningarna korrekt förstår de data du skickar (ett Javascript-objekt) och konverterar nycklarna till Ruby-symboler. Valideringskoden förväntar sig att nycklarna ska vara strängar (eftersom de avkodas från en giltig JSON), därav felmeddelandet.
