2012-08-31 78 views
0

我有一堆值和PHP数组和我需要将其转换成JSON值用于经由CURL张贴到parse.comPHP json_encode问题

的问题是,PHP数组被转换成JSON对象(字符串键和值,VS字符串只是值)

我结束了

{"showtime":{"Parkne":"1348109940"}} 

而是然后

{"showtime":{Parkne:"1348109940"}} 

解析抱怨说这是一个对象而不是数组,因此不会接受它。

由于

{"showtime":{"Parkne":"1348109940"}} 

是一个JSON对象(key = a string

反正有没有做到这一点使用json_encode?或者一些解决方案

回答

2

盲注......我的印象是你的PHP数据结构不是你想要开始的那个。你可能有这样的:

$data = array(
    'showtime' => array(
     'Parkne' => '1348109940' 
    ) 
); 

...并确实需要这样的:

$data = array(
    array(
     'showtime' => array(
      'Parkne' => '1348109940' 
     ) 
    ) 
); 

随意编辑的问题,并提供预期输出的一个样本。

+0

哇......我简直不敢相信那很简单。 – Steven

6

这就是JSON规范:对象键必须被引用。虽然你的第一个没有加引号的版本是有效的Javascript,所以引用的版本,并将在任何JavaScript引擎中解析相同。但是在JSON中,键必须被引用。 http://json.org


跟帖:

展示你是如何定义你的阵列,除非你上面的样品是你的阵列。这一切都归结于你如何定义你正在编码的PHP结构。

// plain array with implicit numeric keying 
php > $arr = array('hello', 'there'); 
php > echo json_encode($arr); 
["hello","there"] <--- array 

// array with string keys, aka 'object' in json/javascript 
php > $arr2 = array('hello' => 'there'); 
php > echo json_encode($arr2); 
{"hello":"there"} <-- object 

// array with explicit numeric keying 
php > $arr3 = array(0 => 'hello', 1 => 'there'); 
php > echo json_encode($arr3); 
["hello","there"] <-- array 

// array with mixed implicit/explicit numeric keying 
php > $arr4 = array('hello', 1 => 'there'); 
php > echo json_encode($arr4); 
["hello","there"] <-- array 

// array with mixed numeric/string keying 
php > $arr5 = array('hello' => 'there', 1 => 'foo'); 
php > echo json_encode($arr5); 
{"hello":"there","1":"foo"} <--object 
+0

那么为什么Parse.com抱怨,我向它发送的对象不是一个数组? – Steven

+0

因为JS中的数组是严格数字键控的。你发送一个字符串键,这使得它成为一个对象。同样,'{}'表示JS中的对象。数组使用'[]'。你的'[{}]'注释示例是一个数组,其中包含一个元素:一个带键值的公园车道/ 111的物体。你是什​​么意思“不能卷曲”? –

+0

好吧,为什么json_encode使用{}编码我的PHP数组?我怎样才能使用[]? – Steven

0

可以使用json_encode 您的数组转换成JSON假设你的数组不为空,你可以做这样的

$array=(); 
$json = json_encode($array); 
echo $json; 
0

这听起来像你需要把你的单个对象和数组中的包裹。

试试这个:

// Generate this however you normally would 
$vals = array('showtime' => array("Parkne" => "1348109940")); 

$o = array(); // Wrap it up ... 
$o[] = $vals; // ... in a regular array 

$post_me = json_encode($o);