【问题标题】:PHP json_encode string key as arrayPHP json_encode 字符串键作为数组
【发布时间】:2019-03-02 18:47:50
【问题描述】:

我为我的游戏编写了一个 api 来获得成就等。我通过 www 请求将数据从网络服务器加载到统一 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,因为 untity 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":""  
            }
        ]
    }
]

【问题讨论】:

  • 那么让player_achievements 成为一个对象数组?
  • json_decode 带有数组标志?
  • @Jeff 他们失去了一层嵌套,这不是序列化格式问题
  • 问题在于您传递给json_encode() 的数组。如果您显示创建它的代码,我们可以帮助您修复其结构。
  • 可能想要 json_decode() 然后 json_encode() 你的数据。这帮助我解决了很多 JSON 问题。

标签: php json


【解决方案1】:

如果我正确阅读了您的问题,您需要将 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": ""
      }
    ]
  }
]

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多