这里我有这个json文件。
{
"BnUs5hQZkJWLU9jGlpx9Ifq5ocf2" : {
"bio" : "Your bio!\r",
"birthday" : "Date of Birth?",
"location" : "Location?",
"markerBorder" : 1.5542403222038021E7,
"markerColor" : 8222122.31461079,
"name" : "NamesName?",
"profilePrivacy" : 2,
"sex" : "Gender?",
"privacy" : 2,
"points" : {
"-Kc7lfJk3XbPlNyk-wIR" : {
"address" : "dsfsdfasfsfd",
"description" : "status/desription",
"latitude" : 35.2,
"longitude" : -80.7,
"mediaTargets" : "none",
"pub" : false,
"timestamp" : 1486205926658
},
"aaa" : "aaa"
}
}
}
当我使用firebase时,会自动生成那些随机的字符串。
在这种情况下,可能会有更多的"点"我将不得不考虑到。因此,当我引用点时,我应该与数组通信,因为它包含"-Kc7lfJk3XbPlNyk-wIR"
(数组)和"aaa"
(字符串)。
那么为什么在尝试将parsedObject.points
转换为数组时会出现类型错误?
var parsedObject:Object = JSON.parse(e.target.data);
var multiArray:Array = parsedObject.points;
TypeError: Error #1034: Type Coercion failed: cannot convert Object@5c16089 to Array.
我基本上试图做与this guy正在做的相反的事情。
编辑:我在the notes中看到它只处理字符串,数字和布尔值..
我设法通过添加"父母"来解决这个问题。对象中的节点复制与整个节点名称相同的值,因此我可以在脚本中引用它。有没有更好的方法来解决这个问题?似乎很多余。
var parsedObject:Object = JSON.parse(e.target.data);
var myPoints:Object = parsedObject["points"];
//Get all trek names
for each (var key:Object in myPoints)
{
trace("Key = " + key.parent);
trace(parsedObject.treks[key.parent].latitude) //Returns -80.7
}
答案 0 :(得分:2)
因为Array是Object的子类。
var A:Array = new Array();
var B:Object = new Object();
trace(A is Array); // true
trace(A is Object); // true
trace(B is Array); // false
trace(B is Object); // true
B = new Array(); // nothing wrong here
A = new Object(); // throws exception
因此,您可能希望从parsedObject.points对象中分析您希望从Array表单中获取哪种数据。
或者,这就是从JSON字符串中获取实际数组的方法:
{
"list": [1,2,3,4,5,6]
}
答案 1 :(得分:1)
JSON.parse
给我看起来正确解析了它。
JSON中的数组使用方括号,大括号被解释为对象。
如果您有
,则只能Array
JSON.parse
"points": [
...
]
而这是Object
:
"points": {
...
}
我建议你研究一下为什么你没有从你的来源获得[]
。