2013-07-05 15 views
28

に文字列を変換します、それは現在、PHPの文字列である私はSQLクエリから次の結果持つJSONオブジェクトPHP

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

はJSONオブジェクトにこれを変換する簡単な方法は、(私が知っていますそれはすでにJSON形式です)。

私はすでにCOORDSどのような余分な項目/要素/オブジェクトは

EDITで追加することができますので、それが対象とする必要があります:SORRY GUYSは、私はOLD/WRONGの文字列を貼り付け!

+12

から有効です。これは有効なJSONではありません。これを何かに変換するのは難しいでしょう。 – deceze

+0

@deceze何が無効ですか? – user2363025

+7

@ user2363025 http://jsonlint.com/で確認してください –

答えて

61

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

配列/オブジェクト(はstdClass)に文字列を変換するために使用json_decode($string)http://php.net/manual/en/function.json-decode.php

[編集済み]

私はあなたがとはどういう意味ですか "公式JSONオブジェクト"を理解しますが、想定していませんPHPを使用してjsonにコンテンツを追加してから、JSONに変換する必要がありますか?あなたは配列/オブジェクト(はstdClass)に変換する必要があり

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

しかしはstdClassでの作業は、PHPよりも複雑です-Array、これを試してください:

$manage = (array) json_decode($data);

あなたは配列関数を使用することができますこの方法:あなたが保存したい

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

万が一:

$manage = (array) json_decode($data); 

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

は、最初の項目を削除:項目を追加http://php.net/manual/en/function.array.php

を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 = (array) json_decode($data); 

$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','w'))){ 
    fwrite($id,json_encode($manage)); 
    fclose($id); 
} 

私は私はあなたの質問を理解している願っています。

幸運。

+0

建設的な助けをありがとう – user2363025

+2

json_decodeがトリックをしました..ありがとう – zeetit

+0

なぜ私は別の配列にプッシュしている配列が私の髪を引っ張ってくれてありがとうございますオブジェクトではなく文字列。 –

0

json_encode()をお試しください。

そして、あなたはjson_decode()メソッドを使用することができ、バック有効なJSON文字列を変換するには、再びValid JSON

+3

これをチェックしてください:http://w3fools.com/ – Dan

10

を見て。

$jObj = json_decode($jsonString); 

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

$jArr = json_decode($jsonString, true); 

変換する方法バックオブジェクト使用するこの方法を、それを変換する

あなたの言及した文字列をそれらのいずれかに戻すには、有効なJSON文字列が必要です。それを達成するには、次の操作を行う必要があります:Coordsアレイでは

  1. は、オブジェクトの開始と終了から2 "(二重引用符)を削除します。ここで
  2. 配列内のオブジェクトは、(,)seprated、そうCoords配列内のオブジェクト間のカンマを追加します。..

そして、あなたは有効なJSON文字列を持つことになりますコンマされている。..

はあなたです私は有効なものに変換JSON文字列:http://pastebin.com/R16NVerw

3

あなたは

$array = json_decode($sting,true) 

を使用しますが、前にJSONを検証することができます。あなたはhttp://jsonviewer.stack.hu/

関連する問題