【问题标题】:PHP Merge json files [duplicate]PHP合并json文件[重复]
【发布时间】:2020-02-05 13:59:10
【问题描述】:

我有 2 个 json 文件,每个文件包含 500 个数组。我需要将 2 个文件合并到 1 个文件中,因此结果将是 1000 个数组。我从 stackoverflow 中找到了代码,但它无法正常工作,它只是向我显示文件 1 数据。

<?php

$a = file_get_contents ("cache.json");
$b = file_get_contents ("cache2.json");

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

json数据是这样的

$a = '[{"COLUMN_NAME":"ORDER_NO","COLUMN_TITLE":"Order Number"},{"COLUMN_NAME":"CUSTOMER_NO","COLUMN_TITLE":"Customer Number"}]';
$b = '[{"COLUMN_NAME":"ORDER_NO","DEFAULT_VALUE":"1521"},{"COLUMN_NAME":"CUSTOMER_NO","DEFAULT_VALUEE":"C1435"}]';

【问题讨论】:

  • array_mergejson_decode($json, true) 之后?

标签: php


【解决方案1】:

试试array_mergejson_decode

 $r = array_merge(json_decode($a,true), json_decode($b,true));
 echo json_encode($r);

工作示例:https://3v4l.org/J6iW3

【讨论】:

    【解决方案2】:

    另一种解决方案,无需解码:

    function concatJsonArrays(...$arrays) {
        $result = [];
    
        foreach ($arrays as $array) {
            $result[] = substr($array, 1, strlen($array) - 2);
        }
    
        return "[".implode(',', $result)."]";
    }
    
    // print result aray
    echo concatJsonArrays($a, $b);
    

    如果你有大的json数据或json中的深层对象,这个解决方案一定更好。

    【讨论】:

    • 虽然此建议实际上可能适用于提供的示例数据,但使用字符串函数手动制作有效的 json 字符串绝对不是专业实践。研究人员——你已经被警告过了。
    【解决方案3】:

    您可以使用数组合并,但我建议首先确保 JSON 代码有效并且文件存在,然后再假设 json_decode 将返回一个数组。否则,如果将 NULL 或 FALSE 与数组合并,则最终结果为 FALSE。

    假设第一个缓存文件存在,而另一个不存在,或者其中一个已损坏并包含损坏的编码 JSON 数据。

    通过检查,至少您知道您将始终获得一个包含尽可能多的有效数组数据的数组,或者知道何时报告错误以及其中一个阶段中的哪个文件。

    $data = Array();
    foreach(Array("cache.json","cache2.json") as $f){
        $dc = Array();
        if($fc = file_get_contents($f)){
            if($dc = json_decode($fc,true)){
                $data = empty($data)?$dc:array_merge($data,$dc);
            }
        }
    }
    
    echo json_encode($data);
    

    【讨论】:

    • 我会简化为:$data = []; foreach (["cache.json", "cache2.json"] as $f) { $data = array_merge($data, json_decode(file_get_contents($f), true)); } echo json_encode($data);
    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2020-10-16
    • 2019-07-18
    • 2013-01-18
    相关资源
    最近更新 更多