2011-06-11 71 views
4

這裏是保存在文件中的JSON數據例如data.txtPHP - 如何更新txt文件中的JSON數據?

[ 
    {"name":"yekky"}, 
    {"name":"mussie"}, 
    {"name":"jessecasicas"} 
    ...// many rows 
    ] 

我想更新的文件,因此它看起來就像這樣:

[ 
{"name":"yekky","num":"1"}, 
{"name":"mussie","num":"2"}, 
{"name":"jessecasicas","num":"3"} 
...// many rows 
] 

這是我到目前爲止有:

$json_data = file_get_contents('data.txt'); 
// What goes here? 

我該如何計算JSON樹中有多少行?

+2

在已經回答[PHP-JSON-解碼-A-TXT的文件(http://stackoverflow.com/questions/6312726/php-json-decode-a-txt-file)和http: //stackoverflow.com/questions/6311813/php-how-to-write-data-into-json – 2011-06-11 00:38:07

+0

@jcinacio,我現在正在研究json。所以第一個問題是如何寫,現在是如何更新。對你來說很容易,但對一個學生來說並不容易。 – 2011-06-11 00:44:43

+0

在php中有精確的** 2 ** json函數 - json_encode和json_decode。我建議你閱讀PHP [手冊](http://www.php.net/manual/en/) – 2011-06-11 00:46:57

回答

6

使用json_decode()解碼PHP數組中的JSON數據,操作PHP數組,然後使用json_encode()重新編碼數據。

例如:

$json_data = json_decode(file_get_contents('data.txt'), true); 
for ($i = 0, $len = count($json_data); $i < $len; ++$i) { 
    $json_data[$i]['num'] = (string) ($i + 1); 
} 
file_put_contents('data.txt', json_encode($json_data)); 
+1

'$ json_data [$ i]'實際上是一個對象,而不是一個數組。你的代碼不會工作。 – Benjamin 2011-06-11 00:42:46

+0

@Benjamin Morel,仔細檢查文檔。 – rid 2011-06-11 00:43:20

+0

@Radu,運行你的代碼:'致命錯誤:不能使用stdClass類型的對象作爲數組'。他的JSON是一組對象。 – Benjamin 2011-06-11 00:46:10

2

您應該使用PHP JSON library此類任務。例如,已經從文件中讀取您的JSON數據後,做這樣的事情:

$json = json_decode($json_data); 
$itemCount = count($json); 

具有修飾你的JSON數據後,只需再次對其進行編碼:

$json_data = json_encode($json); 

而且,你似乎想確認你的JSON數據。我的建議是隻使用出自json_encode的任何內容並將其保存到您的文件中,因爲它可能是JSON數據的最小(文件大小)可能表示。

如果您以人類可讀的方式對其進行格式化,則會有很多額外的空格/製表符/換行符,這些增加了文件大小和解析時間。

如果你需要自己閱讀,你仍然可以beautify your JSON data by hand

2
$file = 'data.txt'; 
$data = json_decode(file_get_contents($file)); 
foreach ($data as $key => $obj) { 
    $obj->num = (string)($key+1); 
} 
file_put_contents($file, json_encode($data)); 
相關問題