为什么不能用JSON处理我的数组?

时间:2017-02-04 12:36:39

标签: arrays json actionscript-3

这里我有这个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
    }

2 个答案:

答案 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": {
    ...
}

我建议你研究一下为什么你没有从你的来源获得[]