dstxpei5823 2017-04-27 14:44
浏览 45
已采纳

使用PHP创建带动态密钥的嵌套JSON

I get some data from an API call and I try to construct a JSON to send it back to another API.

The final JSON must look like this:

{
    "jobs": {
        "MP_OFFER_ID_1": {
            "job_id": "jobboard_reference_1",
            "url": "url_1",    
            "status": 0
        },
        "MP_OFFER_ID_2": {
            "job_id": "job_id_2",
            "url": "url_2",
            "status": 1
        },
    }
}

So under the jobs key, it's not an array of elements but a list of elements with unique keys.

And that's what I'm having trouble to get.

The data I want to parse is in an array structured like this:

Array(
    [0] => Array(
        [link] => some-url
        [id] => 18790674
        [ref] => 0015909-18790674
    )
    // ...
);

link has to be placed in the url key of the JSON.

id is the JSON key, in the examples it's MP_OFFER_ID_1 etc

ref has to be placed in job_id

I actually have this JSON at the end:

{
    "jobs": [
        [
            {
                "18790674": {
                    "job_id": "0015909-18790674",
                    "url": "test",
                    "status": 1
                }
            },
            {
                "18790678": {
                    "job_id": "0015892-18790678",
                    "url": "test",
                    "status": 1
                }
            }
        ]
    ]
}

As you can see, jobs is an array (actually it's an array of array ^^) and that's not what I want here...

  • 写回答

1条回答 默认 最新

  • douxiapi4381 2017-04-27 15:11
    关注

    I came up with this, but it was very difficult to understand what exactly you want from the very limited info in question:

    <?php
    $input = [
      [
        'id' => 18790674,
        'link' => 'some-url',
        'ref' => '0015909-18790674',
      ],
      [
        'id' => 18790678,
        'link' => 'another-url',
        'ref' => '0015909-18790678',
      ],
    ];
    
    $output = new stdClass();
    
    foreach ($input as $arr) {
      $obj = new stdClass();
    
      $key = $arr['id'];
      $obj->job_id = $arr['id'];
      $obj->url = $arr['link'];
      $obj->status = '1'; // ?
    
      $output->{$key} = $obj;
    
    }
    
    echo json_encode($output, JSON_PRETTY_PRINT);
    

    Output:

    {
        "18790674": {
            "job_id": 18790674,
            "url": "some-url",
            "status": "1"
        },
        "18790678": {
            "job_id": 18790678,
            "url": "another-url",
            "status": "1"
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮