PHP json_将字符串键编码为数组

PHP json_将字符串键编码为数组,php,json,Php,Json,我为我的游戏编写了一个api来获得成就等等。我通过www请求将数据从Web服务器加载到unity c#中。我需要一个从php数组,其中包含成就和更多的数据。问题是,结果是这样的 [ {"ID":"1", "gameID":"1", "name":"achv1", "neededvalue":"50", "player_achievements":{ "ID":"8", "achievementID":"1",

我为我的游戏编写了一个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":""
        }
    }
]
玩家成就是头部数组的子数组,我需要玩家成就[]周围的方括号,因为untity c#无法将其转换为对象。我花了几个小时寻找解决方案,但没有人解释如何解决。我找到了这个,但这不是我的选择。我要的是字符串键,不是数字。给出一种将字符串键用作数组而不是对象的方法? 我需要它,就像这样:

[
    {   "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\u成就元素设置为包含该元素原始值的数组

<?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);

那么,让
player\u成就
成为一个对象数组?使用array flag?@Jeff他们失去了一个嵌套级别,这不是序列化格式的问题,问题在于传递给
json\u encode()
的数组。如果您显示创建它的代码,我们可以帮助您修复它的结构。可能需要json_decode()然后json_encode()来修改您的数据。这帮助我解决了很多JSON问题。
[
  {
    "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": ""
      }
    ]
  }
]