2017-02-04 1 views
1

У меня есть этот json-файл.Почему нет as3, передающего мои массивы в 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 [email protected] to Array. 

Я в основном пытаются делать противоположное тому, что this guy делает.

Edit: я вижу в 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

Поскольку 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 объекта, чтобы продолжить.

В качестве альтернативы, то есть, как вы получите фактический массив из строки JSON:

{ 
    "list": [1,2,3,4,5,6] 
} 
1

Похоже, это правильно быть разобран JSON.parse мне.

Массивы в JSON используют квадратные скобки, фигурные скобки интерпретируются как объекты.

Вы бы только ожидать Array от JSON.parse если вы имели

"points": [ 
    ... 
] 

в то время как это Object:

"points": { 
    ... 
} 

Я предлагаю вам взглянуть на, почему вы не получаете [] от вашего источник.

Смежные вопросы