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.