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"
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)