web-dev-qa-db-ja.com

文字列をJSONオブジェクトPHPに変換する

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)"} 
    ]
}

現在はphpの文字列ですが、これをJSONオブジェクトに簡単に変換する方法はありますか(既にJSON形式になっていることは知っています)。

私はそれがオブジェクトである必要があるので、座標がすでにあるもののような追加のアイテム/要素/オブジェクトを追加できます

編集:申し訳ありませんが、古い/間違った文字列を貼りました!

52
user2363025

@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)"
    }]
}

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)"}]}';

これをObject(stdClass)に変換する必要があります。

$manage = json_decode($data);

しかし、stdClassの操作はPHP-Arrayよりも複雑なので、これを試してください(trueで2番目のパラメーターを使用します):

$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);

最初のアイテムを削除:

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

jsonにdatabaseまたはfileに保存したい場合:

$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);
}

私はあなたの質問を理解したことを望みます。

がんばろう。

91

有効なJSON文字列を元に戻すには、 json_decode() メソッドを使用できます。

オブジェクトに変換して戻すには、次のメソッドを使用します。

$jObj = json_decode($jsonString);

そして、連想配列に変換するには、2番目のパラメーターをtrueに設定します。

$jArr = json_decode($jsonString, true);

言及された文字列をそれらのいずれかに戻すには、有効なJSON文字列が必要です。それを実現するには、次のことを行う必要があります。

  1. Coords配列で、オブジェクトの開始と終了から2つの"(二重引用符)を削除します。
  2. 配列内のオブジェクトはコンマ区切り(,)であるため、Coords配列内のオブジェクト間にコンマを追加します。

そして、有効なJSON文字列があります。

有効なJSON文字列に変換したJSON文字列を次に示します。 http://Pastebin.com/R16NVerw

15

使用できます

$array = json_decode($sting,true)

ただし、前にJsonを検証します。 http://jsonviewer.stack.hu/ から検証できます

5
Nabeel Arshad

json_encode()で試してください。

もう一度見てください 有効なJSON

0
drag.spas