首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以从多个json文件中提取和合并单个json对象?

是否可以从多个json文件中提取和合并单个json对象?
EN

Stack Overflow用户
提问于 2020-03-02 01:06:40
回答 1查看 225关注 0票数 0

抱歉,标题太混乱了。我在合并一些JSON文件时遇到了一些问题。我需要将所有产品合并到一个单独文件中的数组中。

我有一个包含相同结构的json文件的目录。我使用glob选择所有文件并解码->追加->将json文件编码成一个大文件。

这是我的代码:

代码语言:javascript
复制
<?php
$files = glob("*.json");
$newDataArray = [];
foreach($files as $file){
    $thisData = file_get_contents($file);
    $thisDataArray = json_decode($thisData);
    $newDataArray[] = $thisDataArray;
}
$newDataJSON = json_encode($newDataArray);
file_put_contents("merged.json",$newDataJSON);
?>    

现在,上面的代码看起来很好用,但是我只想提取所有的产品。

我需要达到的目标的快速例子。

File1.json

代码语言:javascript
复制
{
  "status": true,
  "user": {
    "username": "sally",
    "avatar": "/images/default-avatar.png",
    "products": [
      {
        "id": "35vR4hr",
        "title": "Picture 1",
        "image": null,
        "quantity": {
          "min": 1,
          "max": 1
        },
        "price": 2,
        "currency": "CAD",
        "stock_warning": 1,
        "type": "service",
        "stock": 9223372036854776000
      },
      {
        "id": "na1Id4t",
        "title": "Picture 2",
        "image": null,
        "quantity": {
          "min": 1,
          "max": 1
        },
        "price": 0.75,
        "currency": "CAD",
        "stock_warning": 3,
        "type": "service",
        "stock": 9223372036854776000
      }
    ]
  }
}

File2.json

代码语言:javascript
复制
    {
  "status": true,
  "user": {
    "username": "Jessica",
    "avatar": "/images/default-avatar.png",
    "products": [
      {
        "id": "wjiefi94",
        "title": "Picture 3",
        "image": null,
        "quantity": {
          "min": 1,
          "max": 1
        },
        "price": 2,
        "currency": "CAD",
        "stock_warning": 1,
        "type": "service",
        "stock": 9223372036854776000
      },
      {
        "id": "n34idwi",
        "title": "Picture 4",
        "image": null,
        "quantity": {
          "min": 1,
          "max": 1
        },
        "price": 0.75,
        "currency": "CAD",
        "stock_warning": 3,
        "type": "service",
        "stock": 9223372036854776000
      }
    ]
  }
}

我希望将数据合并如下:

merged.json

代码语言:javascript
复制
{
    "products": [
      {
        "id": "wjiefi94",
        "title": "Picture 1",
        "image": null,
        "quantity": {
          "min": 1,
          "max": 1
        },
        "price": 2,
        "currency": "CAD",
        "stock_warning": 1,
        "type": "service",
        "stock": 9223372036854776000
      },
      {
        "id": "n34idwi",
        "title": "Picture 2",
        "image": null,
        "quantity": {
          "min": 1,
          "max": 1
        },
        "price": 0.75,
        "currency": "CAD",
        "stock_warning": 3,
        "type": "service",
        "stock": 9223372036854776000
      },
            {
        "id": "n34idwi",
        "title": "Picture 3",
        "image": null,
        "quantity": {
          "min": 1,
          "max": 1
        },
        "price": 0.75,
        "currency": "CAD",
        "stock_warning": 3,
        "type": "service",
        "stock": 9223372036854776000
      },
            {
        "id": "n34idwi",
        "title": "Picture 4",
        "image": null,
        "quantity": {
          "min": 1,
          "max": 1
        },
        "price": 0.75,
        "currency": "CAD",
        "stock_warning": 3,
        "type": "service",
        "stock": 9223372036854776000
      }
    ]
  }

我希望这是合理的。我觉得我已经到了死胡同。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2020-03-02 01:48:48

您是否可以调用像"jq“这样的外部工具?处理json (就像csv一样),特别是处理许多文件,不是您应该手动处理的事情。

顺便说一下,您的示例在产品2和3以及3和4之间没有逗号。

您在第5行的新代码可能应该用数组括号读成这样吗?否则,您将覆盖最后一个文件的内容:

代码语言:javascript
复制
$thisDataArray[] = json_decode($thisData);

你为什么要把萨利和杰西卡的产品合并成同一个用户呢?也许您可以将所有的产品对象提取到一个文件中?

(与其说是答案,不如说是代码评审,希望它能有所帮助;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60481320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档