2010-02-03 11 views
6

Jeśli używam json_encode() na tablicy tak:json_encode usunąć cytaty z klawiszy?

return json_encode(array('foo' => 'bar')); 

Zwrot wynosi:

{'foo' : 'bar'} 

Kluczem jest przekazywany jako dosłowne, a to jest mój skrypt wyłączający. Co naprawdę potrzebne jest:

{ foo : 'bar' } 

Czy json_encode zrobić, czy mam się rozebrać cytaty out sobie z jakimś brzydkim regex?

+5

Twój drugi przykład jest nieprawidłowy JSON. Klucze muszą być cytowanymi ciągami. – Gumbo

Odpowiedz

14

Kiedy przetestować ten fragment kodu:

echo json_encode(array('foo' => 'bar')); 
die; 

uzyskać:

{"foo":"bar"} 

który jest ważny JSON.

(Uwaga są to podwójne cudzysłowy, a nie proste cytaty jak pisał)


ouput prosicie:

{ foo : 'bar' } 

jest ważny Javascript, ale jest nieważny JSON - więc json_encode nie zwróci tego.

Zobacz specyfikację formatu JSON - , która jest podzbiorem pod numerem, a nie samą JavaScript.


Zamiast „stripping cytaty out sobie z jakimś brzydkim regex”, należy dostosować swój kod, więc akceptuje ważne JSON: to jest lepsze, moim zdaniem.

0

Jak to się dzieje ze skryptem?

W przypadku JSON specification nazwy kluczy to , które mają być ciągami znaków. Drugi opublikowany fragment nie jest prawidłowy JSON.

2

Nie, json_encode nie zrobi tego za Ciebie. Numer json specification wymaga, aby klucze były cytowane. Ma to na celu zapewnienie, że klucze będące słowami zastrzeżonymi javascript nie złamią obiektu danych.

0

Dzięki, wszyscy. Nie wiedziałem o specyfikacji JSON. Problem był w rzeczywistości z moim skryptem, ponieważ nie ustawiłem typu danych mojej funkcji $ .ajax() na "json"

Czego dowiedziałem się dzisiaj - JSON i JavaScript to nie to samo!