AS3 JSON разбор - PullRequest
       18

AS3 JSON разбор

7 голосов
/ 11 ноября 2009

У меня есть небольшая дилемма. У меня есть объект JSON, формат которого мне незнаком (начинается с массива [] вместо объекта {}), и мне было интересно, как я могу проанализировать его в AS3. Объект выглядит так:

[
    {
        "food": [
            {
                "name": "pasta",
                "price": 14.50,
                "quantity": 20
            },
            {
                "name": "soup",
                "price": 6.50,
                "quantity": 4
            }
        ]
    },
    {
        "food": [
            {
                "name": "salad",
                "price": 2.50,
                "quantity": 3
            },
            {
                "name": "pizza",
                "price": 4.50,
                "quantity": 2
            }
        ]
    }
]

Я действительно не знаю, как добраться до каждого набора продуктов и каждого объекта в нем. Любая помощь будет принята с благодарностью! Спасибо!

Ответы [ 4 ]

24 голосов
/ 13 декабря 2011

из флеш плеера 11, а в sdk 4.6 есть нативная поддержка json. Чтобы использовать его, вы должны изменить

var foods:Array = JSON.decode(jsonstring);

до

var foods:Array = JSON.parse(jsonstring);

в то время как JSON не из as3corelib, а из самого sdk. Довольно намного быстрее;)

12 голосов
/ 11 ноября 2009

Вам нужно будет использовать JSON Object Class (ссылка ниже) http://code.google.com/p/as3corelib/

а потом как то так ..

var data:String = "{\"name\":\"pizza\",\"price\":\"4.50\",\"quantity\":\"2\"}";
var food:JSONObject = new JSONObject(data);
trace(food.name); // Pizza
trace(food.price); // 4.50
trace(food.quantity); // 2
food.number++;
var newData:String = String(food);
trace(newData); // {"name":"pizza","price":"4.50","quantity":"2"}
7 голосов
/ 11 ноября 2009

Интересная структура данных ... это должно сделать это:

import com.adobe.serialization.json.JSON;
/* ... other code ... */
var foods:Array = JSON.decode(jsonstring);
for(var i:int = 0; i < foods.length; i++) {
  for(var j:int = 0; j < foods[i].length; j++) {
    trace(foods[i][j].name);
  }
}
2 голосов
/ 09 июня 2012

Я искал альтернативу библиотеке и нашел метод здесь . Я предполагаю, что это будет работать в контексте операции (на которую, конечно, был дан ответ несколько лет назад), поскольку она не требует возвращаемого типа объекта. Это хорошо работает для того, что я пытался сделать, когда нашел этот пост и нашел решение довольно элегантным для флеш-памяти в браузере.

function json_decode( data:String ):* {
  try {
    return ExternalInterface.call("function(){return " + data + "}");
  } catch (e:Error) {
    return null;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...