3 回答
TA贡献1825条经验 获得超4个赞
好吧,您的 json_encoding 数组可以称为列表,其中的数组可以称为地图。
例如,您将这样的数组传递给函数:
array( // this is a List, you have only object
array( // this is a Map, you have key value pairs
'Content-Title' => ...,
'ContentBody' => ...,
),
array( // this is a Map, you have key value pairs
'Content-Title'=>...,
'ContentBody' => ...,
),
)
编码这会在结尾添加一个 [ ] 以表明它是一个列表。
[{...}{...}]
如果您想要一个 map / json 对象,您必须在添加结果时指定键并在 C# 脚本中调用这些键。
$count = 1;
while ($row = $result->fetch_assoc())
{
$dbdata["result-$count"] = $row;
$count++;
}
这反过来会给你一个数组,如:
array( // this is a Map, you have key value pairs
'result-1' => array( // this is a Map, you have key value pairs
'Content-Title' => ...,
'ContentBody' => ...,
),
'result-2' => array( // this is a Map, you have key value pairs
'Content-Title'=>...,
'ContentBody' => ...,
),
)
这应该导致如下编码:
{"result-1":{...},"result-2":{...}}
编辑:某些语言将地图和列表作为单独的数据类型 C# 将它们分开。而在 PHP 中,数组具有两者的功能。
顾名思义,映射通常是一种结构,它在用户指定的键的帮助下映射出值。
$map = array(
'this_key' => 'will_give_me_this_result',
'and_this_one' => 'will_give_me_value_at_this_key',
'I_help_you_find_whats_on_the_right' => ' \0/" ',
);
虽然列表不需要使用键来指向值。您可以使用索引 0,1.. 它们具有键的功能,但仍然不会被视为键,因为它们指定了值的位置并且不需要显式设置。
$list = array(
'IM at position 0',
"and Im at 1, but hey you don't need me to tell you this, I'll always be here",
"position 2, well unless you manipulate me bastard",
array(
'let me be clear',
'my parent is still just a value of outer most array',
"you still now the position of it"
)
);
现在,如果我们 json_encoded 这两个数组:
数组/$地图
{"this_key":"will_give_me_this_result","and_this_one":"will_give_me_value_at_this_key","I_help_you_find_whats_on_the_right":" \\0\/\" "}
数组/$列表
["IM at position 0","and Im at 1, but hey you don't need me to tell you this, I'll always be here","position 2, well unless you manipulate me bastard",["let me be clear","my parent is still just a value of the outer most array","you still now the position of it"]]
注意到不同的括号了吗?
[ ] 表示里面的对象按可预测的 0,1,2 顺序排列,它们不需要键来指定它们。
另一方面 { } 指定一个地图。您可以看到有多个 "key_key" : "value_value" 出现。那是因为您需要密钥才能知道什么是什么值。
现在,我个人不知道 C# 以及如何用该特定语言解码 json,所以我预感你想要获得某种 key:value 结果,但你不能,因为你的 json 输出表明 List 不是地图。
这是 json_encoding 中的数组,但为可见性添加了空格。
数组/$地图
{
"this_key":"will_give_me_this_result",
"and_this_one":"will_give_me_value_at_this_key",
"I_help_you_find_whats_on_the_right":" \\0\/\" "
}
数组/$列表
[
"IM at position 0",
"and Im at 1, but hey you don't need me to tell you this, I'll always be here",
"position 2, well unless you manipulate me bastard",
[
"let me be clear",
"my parent is still just a value of the outer most array",
"you still now the position of it"
]
]
TA贡献1864条经验 获得超6个赞
如果您使用的是 PDO,请尝试:
$dbdata = $result->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($dbdata);
这会将结果作为 php 数组获取。那不应该创建一个无效的 json。
TA贡献1827条经验 获得超8个赞
所以不是 JSON 文件/XML,而是 Unity 无法处理数据。感谢所有指出这一点的人。
这是已成功实施的截断视图:
{
PlayerTipsJSON loadedPlayerData = JsonUtility.FromJson<PlayerTipsJSON>(json);
for (int i = 0;i<loadedPlayerData.data.Count; i++)
{
Debug.Log(loadedPlayerData.data[i].User_ID + "\n");
Debug.Log(loadedPlayerData.data[i].ContentTitle + "\n");
Debug.Log(loadedPlayerData.data[i].ContentBody+ "\n");
Debug.Log(loadedPlayerData.data[i].value + "\n");
Debug.Log(loadedPlayerData.data[i].boolean + "\n");
}
}
[System.Serializable]
public class PlayerData
{
public string fromJSONusername;
public string ContentTitle;
public string ContentBody;
public int User_ID;
public int value;
public bool boolean;
}
[System.Serializable]
public class PlayerTipsJSON
{
public List<PlayerData> data;
}
我没有评论代码,因为我没有编写它,老实说不是 100% 确定发生了什么!我认为它是一个数组的数组。
- 3 回答
- 0 关注
- 89 浏览
添加回答
举报