我正在写json数组到文件。我越来越 [{ , , }][{ , , }][{ , , }]。我需要此输出[{,,},{,,},{,,}]。有什么建议?

时间:2018-05-28 13:32:11

标签: php json

我正在将json数组写入文件。我越来越 [{ , , }][{ , , }][{ , , }]。我需要此输出[{,,},{,,},{,,}]。 我不是将json项添加到数组中,而是创建多个数组。

$a = array();
$new_data = array(
  'name' => $_POST["product_name"],
  'age' => $_POST["quantity_stock"], 
  'city' => $_POST["item_price"]
  );

// pushing the post data each time the page reloads with post values
array_push($a,$new_data);
$json = json_encode($a);
$myfile = fopen("newfile.json", "a+") or die("Unable to open file!");
fwrite($myfile, $json);
fclose($myfile);
$data = file_get_contents("newfile.json");
$data = json_decode($data, true);

//output
[{"name":"ggg","qty":"ff","price":"ff"}] 
[{"name":"ggg","qty":"ff","price":"ff"}]

//How to achieve this 
[{"name":"ggg","qty":"ff","price":"ff"},
{"name":"ggg","qty":"ff","price":"ff"}]

6 个答案:

答案 0 :(得分:0)

尝试将文件中的数据加载到a中,将new_array附加到所述数据,然后将这个新的json列表对象写入文件。

答案 1 :(得分:0)

问题在于将数据附加到newfile.json,这里一个列表已作为文本附加,之后每当我们附加更多文本时,它都会附加为文本,而不是json对象,因此请尝试以下代码和现有代码: -

$a = array();
$new_data = array(
    'name' => $_POST["product_name"],
    'age' => $_POST["quantity_stock"], 
    'city' => $_POST["item_price"]
); 

// reading data from .json file
$data = file_get_contents('newfile.json');

// creating an array of object from the text of .json file
$tempArray = json_decode($data);

// adding our new object to array
array_push($tempArray, $new_data);

// creating json representation of the array
$jsonData = json_encode($tempArray);

// writing json representation to the .json file
file_put_contents('newfile.json', $jsonData);

希望这会有所帮助。

答案 2 :(得分:0)

管理将这些合并在一起。最有可能是更好的解决方案

官方PHP文档中的

array_merge

官方PHP文档中的

json_decode

$a = [{"name":"ggg","qty":"ff","price":"ff"}]; 
$b = [{"name":"ggg","qty":"ff","price":"ff"}];

json_encode(array_merge(json_decode($a, true),json_decode($b, true)))

$r = [];
foreach(json_decode($a, true) as $key => $array){
    $r[$key] = array_merge(json_decode($b, true)[$key],$array);
}
echo json_encode($r);     

答案 3 :(得分:0)

我认为您在每次发布请求后都会写入该文件,而您的数组$a将只包含post数组。

这就是为什么你最后得到你的文件

//output
[{"name":"ggg","qty":"ff","price":"ff"}] 
[{"name":"ggg","qty":"ff","price":"ff"}]

所以要解决此问题并以正确的格式获取数据,每次要写入文件时,首先需要从文件中加载数据,然后将其合并到数组$a和然后再写一遍。

所以这段代码应该适合您的情况

//load file data
$data = file_get_contents("newfile.json");
$a = json_decode($data, true);

$new_data = array(
  'name' => $_POST["product_name"],
  'age' => $_POST["quantity_stock"], 
  'city' => $_POST["item_price"]
  );

// pushing the post data each time the page reloads with post values
array_push($a,$new_data);
$json = json_encode($a);
$myfile = fopen("newfile.json", "w+") or die("Unable to open file!");
fwrite($myfile, $json);
fclose($myfile);
$data = file_get_contents("newfile.json");
$data = json_decode($data, true);

我使用文件中的数据初始化$a,并将fopen中的更改模式初始化为w+

答案 4 :(得分:0)

{{1}}

答案 5 :(得分:0)

使用下面的代码,希望它能满足你的输出:

$data = file_get_contents("newfile.json");

$a = explode("][", $data);

$x = '';
foreach($a as $y){

    $x .= $y.",";
}

echo trim($x, ",");