PHP json_encode字符串键作为数组

时间:2018-09-26 22:54:22

标签: php json

我为自己的游戏写了一个api以获得成就等等。我通过www请求将来自Web服务器的数据加载到unity c#中。我需要一个来自php的数组,其中包含成就和更多数据。问题是,结果就是这样

[
    {"ID":"1",
    "gameID":"1",
    "name":"achv1",
    "neededvalue":"50",
    "player_achievements":{
        "ID":"8",
        "achievementID":"1",
        "playerID":"9",
        "value":"",
        "completed":""
        }
    },
    {"ID":"2",
    "gameID": "1",
    "name":"achv2",
    "neededvalue":"100",
    "player_achievements":{
        "ID":"9",
        "achievementID":"2",
        "playerID":"9",
        "value":"","completed":""
        }
    }
]

player_achievements是head数组的子数组,我需要在player_achievements []周围放置square_brackets,因为统一性c#无法将其转换为对象。我搜索了数小时以找到解决方案,但没有人解释如何做。我找到了这个link,但这对我来说不是一个选择。我想要字符串键而不是数字。给它一种使用字符串键作为数组而不是对象的方法吗? 我需要这样:

[
    {   "ID":"1",
        "gameID":"1",
        "name":"achv1",
        "neededvalue":"50",
        "player_achievements":[
            {   "ID":"8",
                "achievementID":"1",
                "playerID":"9",
                "value":"",
                "completed":""
            }
        ]
    },
    {
        "ID":"2",
        "gameID":"1",
        "name":"achv2",
        "neededvalue":"100",
        "player_achievements":[
            {   "ID":"9",
                "achievementID":"2",    
                "playerID":"9",
                "value":"",
                "completed":""  
            }
        ]
    }
]

2 个答案:

答案 0 :(得分:0)

如果我正确阅读了您的问题,则需要将 player_achievements 元素设置为包含该元素原始值的数组。

<?php

$json = <<<END
[
    {"ID":"1",
    "gameID":"1",
    "name":"achv1",
    "neededvalue":"50",
    "player_achievements":{
        "ID":"8",
        "achievementID":"1",
        "playerID":"9",
        "value":"",
        "completed":""
        }
    },
    {"ID":"2",
    "gameID": "1",
    "name":"achv2",
    "neededvalue":"100",
    "player_achievements":{
        "ID":"9",
        "achievementID":"2",
        "playerID":"9",
        "value":"","completed":""
        }
    }
]
END;

$data = json_decode($json, true);

for($i=0;$i<sizeof($data);$i++)
{
    $data[$i]['player_achievements'] = [$data[$i]['player_achievements']];
}

echo json_encode($data);

这将产生一种您想要的结构。

[
  {
    "ID": "1",
    "gameID": "1",
    "name": "achv1",
    "neededvalue": "50",
    "player_achievements": [
      {
        "ID": "8",
        "achievementID": "1",
        "playerID": "9",
        "value": "",
        "completed": ""
      }
    ]
  },
  {
    "ID": "2",
    "gameID": "1",
    "name": "achv2",
    "neededvalue": "100",
    "player_achievements": [
      {
        "ID": "9",
        "achievementID": "2",
        "playerID": "9",
        "value": "",
        "completed": ""
      }
    ]
  }
]

答案 1 :(得分:-1)

我找到了答案,我在子元素之前添加了一个零作为数组的键。