如果字段匹配,如何覆盖Json - PHP

时间:2014-01-30 23:08:15

标签: php json

在网站上工作,需要为每个用户存储数据。目前使用json文件及其设置方式,它每次都会覆盖数据。

第一个问题,是使用一个json文件来保存这些数据的最佳方法,还是应该为每个用户设置一个目录?

第二个问题,如果一个文件是最好的方法,我该如何附加“唯一”数据?我在“覆盖JSON,如果字段匹配PHP”的帖子中找到了一些示例代码,但它对我不起作用。它现在根本没有写入文件。

原始代码:

$posts[] = array('vhclID'=> $vhclID, 'statVal1'=> $engStat, 'statVal2'=> $brakeStat);

$response['posts'] = $posts;

$fp = fopen('results.json', 'w');
fwrite($fp, json_encode($response));
fclose($fp);

修改后的代码能够附加新数据并消除冗余(不起作用):

$file = file_get_contents('results.json');
$data = json_decode($file);
unset($file);//prevent memory leaks for large json.
//insert data here
$data[vhclID] = array('vhclID'=> $vhclID, 'statVal1'=> $engStat, 
'statVal2'=> $brakeStat);
//save the file
$data = array_values($data);
file_put_contents('results.json',json_encode($data));
echo json_encode($data);
unset($data);//release memory

感谢您的帮助!!

3 个答案:

答案 0 :(得分:1)

如果您要存储典型的用户数据,则应使用数据库;显然,您不希望仅向观察者加载兆字节的用户数据或为一个用户修改一个字段。

如果你有一些发布的数据,并且我理解你的问题,你可能会做这样的事情(但增加更多的安全性):

$new_data = $_POST[];
foreach ($new_data as $name=>$datum) {
 if (empty($data[vhclID][$name]) {
    // This means that this field is unique
    $data[vhclID][$name] = $datum;
 }
}

然后将该数据保存到您的JSON文件中。

答案 1 :(得分:0)

$fp = fopen('results.json', 'r');
$postjson = json_decode(fread($fp, 1024*1024), true);
fclose($fp);

$posts = ($posts==array()) array('vhclID'=> $vhclID, 'statVal1'=> $engStat, 'statVal2'=> $brakeStat) : $postjson['posts'];

$response['posts'] = $posts;

$fp = fopen('results.json', 'w');
fwrite($fp, json_encode($response));
fclose($fp);

应该做你想做的事。 修改$posts

答案 2 :(得分:0)

我经常使用PHP和json数据。

我注意到的一件事是json_decode默认会创建一个PHP object(stdClass)

示例

results.json>>>的内容{"example":"test"}

$file = file_get_contents("results.json");

$json = json_decode($file);

var_dump($json); // Outputs: object(stdClass)#14 (1) { ["example"]=> string(4) "test" }

如果您将true作为第二个参数添加到json_decode,那么您最终会得到一个数组

示例

$file = file_get_contents("results.json");

$json = json_decode($file, TRUE); // Added TRUE as second parameter

var_dump($json); // Outputs: array(1) { ["example"]=> string(4) "test" }

获得适当的数据后,您可以根据需要修改和更改$json,然后将其重新写入.json文件。

因此对于问题1:为每个用户提供单独的json文件(例如:userID-001.jsonuserID-002.json)可能是更好的方法。

对于问题2:您可以使用json_decode($data, TRUE) // with true as second parameter if you want an array获取单个文件,获取内容并将其存储在PHP数组中,然后修改数组并重新保存(使用json_encode)。

希望这有帮助〜!