将字符串转换为JSON对象php

use*_*025 62 php string json object

我从sql查询得到以下结果:

{"Coords":[
    {"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},
    {"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},
    {"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},
    {"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},
    {"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"} 
    ]
}
Run Code Online (Sandbox Code Playgroud)

它目前是php中的一个字符串,有一种简单的方法将其转换为JSON对象(我知道它已经是JSON形式).

我需要它作为一个对象,所以我可以添加额外的项目/元素/对象,就像coords已经是

编辑:抱歉的家伙,我给一个老/错的字符串!

Gui*_*nto 104

@deceze说的是正确的,似乎你的JSON格式不正确,试试这个:

{
    "Coords": [{
        "Accuracy": "30",
        "Latitude": "53.2778273",
        "Longitude": "-9.0121648",
        "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)"
    }, {
        "Accuracy": "30",
        "Latitude": "53.2778273",
        "Longitude": "-9.0121648",
        "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)"
    }, {
        "Accuracy": "30",
        "Latitude": "53.2778273",
        "Longitude": "-9.0121648",
        "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)"
    }, {
        "Accuracy": "30",
        "Latitude": "53.2778339",
        "Longitude": "-9.0121466",
        "Timestamp": "Fri Jun 28 2013 11:45:54 GMT+0100 (IST)"
    }, {
        "Accuracy": "30",
        "Latitude": "53.2778159",
        "Longitude": "-9.0121201",
        "Timestamp": "Fri Jun 28 2013 11:45:58 GMT+0100 (IST)"
    }]
}
Run Code Online (Sandbox Code Playgroud)

使用json_decode到的字符串转换成对象(stdClass)或数组:http://php.net/manual/en/function.json-decode.php

[编辑]

我不明白"官方JSON对象"是什么意思,但是假设您想通过PHP将内容添加到json,然后将其转换回JSON?

假设您有以下变量:

$data = '{"Coords":[{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}]}';
Run Code Online (Sandbox Code Playgroud)

您应该将其转换为Object(stdClass):

$manage = json_decode($data);

但是使用stdClass它比PHP-Array更复杂,然后尝试这个(使用第二个参数true):

$manage = json_decode($data, true);

这样您就可以使用数组函数:http://php.net/manual/en/function.array.php

添加项目:

$manage = json_decode($data, true);

echo 'Before: <br>';
print_r($manage);

$manage['Coords'][] = Array(
    'Accuracy' => '90'
    'Latitude' => '53.277720488429026'
    'Longitude' => '-9.012038778269686'
    'Timestamp' => 'Fri Jul 05 2013 11:59:34 GMT+0100 (IST)'
);

echo '<br>After: <br>';
print_r($manage);
Run Code Online (Sandbox Code Playgroud)

删除第一项:

$manage = json_decode($data, true);
echo 'Before: <br>';
print_r($manage);
array_shift($manage['Coords']);
echo '<br>After: <br>';
print_r($manage);
Run Code Online (Sandbox Code Playgroud)

你想保存到json 数据库文件的任何机会:

$data = '{"Coords":[{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}]}';

$manage = json_decode($data, true);

$manage['Coords'][] = Array(
    'Accuracy' => '90'
    'Latitude' => '53.277720488429026'
    'Longitude' => '-9.012038778269686'
    'Timestamp' => 'Fri Jul 05 2013 11:59:34 GMT+0100 (IST)'
);

if (($id = fopen('datafile.txt', 'wb'))) {
    fwrite($id, json_encode($manage));
    fclose($id);
}
Run Code Online (Sandbox Code Playgroud)

我希望我理解你的问题.

祝好运.


Mir*_*nes 16

要重新转换有效的JSON字符串,可以使用该json_decode()方法.

要将其转换回对象,请使用以下方法:

$jObj = json_decode($jsonString);
Run Code Online (Sandbox Code Playgroud)

要将其转换为关联数组,请将第二个参数设置为true:

$jArr = json_decode($jsonString, true);
Run Code Online (Sandbox Code Playgroud)

顺便把你提到的字符串转换回其中任何一个,你应该有一个有效的JSON字符串.要实现它,您应该执行以下操作:

  1. Coords数组中,"从对象的开头和结尾删除两个(双引号).
  2. 数组中的对象是逗号分隔(,),因此在Coords数组中的对象之间添加逗号.

你将拥有一个有效的JSON字符串..

这是您转换为有效的JSON字符串:http://pastebin.com/R16NVerw


小智 7

如果您不传递第二个参数,或者传递 false,json_decode() 会将 JSON 解析为 stdClass 对象,因此您可以使用“->”箭头表示法来访问对象属性。

<?php

// Store JSON data in a PHP variable
$json = '{"email":"john@doe.com"}';

$obj = json_decode($json, false);
print $obj->email;

?>
Run Code Online (Sandbox Code Playgroud)

输出

john@doe.com
Run Code Online (Sandbox Code Playgroud)


Nab*_*had 6

您可以使用

$array = json_decode($string,true)
Run Code Online (Sandbox Code Playgroud)

但之前验证了Json.您可以从http://jsonviewer.stack.hu/进行验证