我有一个简单的功能,可以在JS中添加产品,我正在尝试使用php将这些产品保存到.json文件中。
我在JS中的json对象看起来像:
{id: 1474791226069, name: "prod", brand: "yhh", price: "2"}
我的php将它们保存在我的.json文件中如下:
<?php
$data[] = $_GET['data'];
$inp = file_get_contents('products.json');
$tempArray = json_decode($inp);
array_push($tempArray, $data);
$jsonData = json_encode($tempArray);
var_dump($jsonData);
file_put_contents('products.json', $jsonData);
?>
可悲的是,我在.json文件中得到的结果看起来有点奇怪:
[["{\"id\":1474721566304,\"name\":\"GGG\",\"brand\":\"GG\",\"price\":\"3\"}"],["{\"id\":1474721570904,\"name\":\"GGGH\",\"brand\":\"GGH\",\"price\":\"4\"}"],["{\"id\":1474721574188,\"name\":\"GGGH\",\"brand\":\"GGHH\",\"price\":\"5\"}"]]
我发现它不可能,让我们说,按ID查找产品并删除或更新它。 我知道.json文件不应该是这样的,所以我的问题是:如何让我的.json文件看起来像一个普通的.json,并且仍然能够追加新的.json来自我的JS的记录,又名:
[
{"id":1,"product":"one", "brand":"blah","price":"1"},
{"id":2,"product":"two", "brand":"blah","price":"2"},
{"id":3,"product":"three", "brand":"blah","price":"3"}
]
所以我可以添加新记录,并以更传统的方式对其进行解码/编码?
请帮忙!
答案 0 :(得分:1)
根据您的评论,
$ _ GET [&#39;数据&#39;]显示在问题中,它是像这样的json对象{id:1474791226069,名称:&#34; prod&#34;,品牌:&#34; yhh&#34;,价格:&#34; 2&#34;}
解码json对象时,始终将第二个参数作为true
传递,以将对象转换为关联数组。此外,您必须使用其他数组,例如$resultData
来获得所需的结果。所以解决方案会是这样的:
$resultData = $tempArray = array();
$data = json_decode($_GET['data'], true);
if(($inp = file_get_contents('products.json')) != false){
$tempArray = json_decode($inp, true);
}
array_push($tempArray, $data);
$resultData[] = $tempArray;
$jsonData = json_encode($tempArray);
file_put_contents('products.json', $jsonData);
var_dump($jsonData);
答案 1 :(得分:0)
您应该在var_dump($tempArray);
array_push($tempArray, $data);
问题可能在于数组结构本身。
这样的代码:
$item['id'] = 1474721566304;
$item['name'] = 'GGG';
$tempArray[] = $item;
$jsonData = json_encode($tempArray);
var_dump($jsonData);
导致此输出:
string(35) "[{"id":1474721566304,"name":"GGG"}]"
答案 2 :(得分:0)
我知道我来晚了一点,但是我发现了一些问题,这有点方便和易于理解。我希望你也能做到。而且,如果将来人们不理解可接受的代码,他们一定会理解。
代码:
<?php
//load data
$data = file_get_contents($_GET['data']);
//decode json to associative array
$json_arr = json_decode($data, true);
//add data
$json_arr[] = array(
"id" => 3,
"product" => "three",
"brand" => "blah",
"price" => "3"
);
//encode the json and save to file
file_input_contents('products.json', json_encode($json_arr));
print_r(json_encode($json_arr));
?>
输出:
[
{
"id":3,
"product":"three",
"brand":"blah",
"price":"3"
}
]
我只添加了一个数据,但是当您添加其他数据时,您只会得到所需的结果。
谢谢。我希望将来对某人有用。学习愉快!