使用PHP

时间:2016-09-25 08:43:28

标签: php json

我有一个简单的功能,可以在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"}
]

所以我可以添加新记录,并以更传统的方式对其进行解码/编码?

请帮忙!

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

我只添加了一个数据,但是当您添加其他数据时,您只会得到所需的结果。

谢谢。我希望将来对某人有用。学习愉快!