这是我的服务器端PHP脚本:
echo json_encode(
array(
"1" => "foo",
"2" => "bar"
)
);
索引是字符串。
我通过$.ajax()
使用jQuery获取此数组,并使用Chrome的开发人员工具,我可以看到它将索引解释为数值而不是字符串。
将JSON从服务器传递到客户端时,如何保留该字符串类型?或者,当将JSON数据从服务器传输到客户端时,类型的概念是否完全丢失?
答案 0 :(得分:1)
字符串可以是数字和字符串,甚至是布尔值,这要归功于类型强制和鸭子打字(如果它看起来像是鸭子,散步和嘎嘎,它是鸭子),因为它们都是松散类型的语言。你应该像字符串一样处理它。
对于Chrome开发者工具,您的字符串只包含数字字符。因此,它也是一种数字数据类型(它看起来像一只鸭子")。
也许如果你解释一下,确切地说,你正在做的事情是不行的,我们可以用更好的方式帮助你。
答案 1 :(得分:0)
这是因为在PHP中,javaScript调用的对象是php中的数组。在JavaScript中,数组索引不能是字符串,它们必须是正整数。
如果您希望JavaScript将其解释为数组,请为其指定0索引并使索引成为整数而不是字符串。
您的代码已经完成了您希望它执行的操作。键是字符串。
var jsonStr = '{"1":"foo","2":"bar"}';
var obj = JSON.parse(jsonStr);
for (key in obj) {
console.log(typeof key, key); // string 1, string 2
}
编辑(每条评论)
永远不要依赖JavaScript对象的排序顺序,它可能因浏览器而异。