2013-08-26 2 views
0

У меня есть флеш-приложение, где в функции я должен разбирать json, прошедший как объект каким-то внешним API, который я не могу изменить.Actionscript3 разбор json с объектом

мой взгляд JSON как это:

{ 
    "prodotti": [ 
     { 
      "titolo": "test", 
      "marca": "", 
      "modello": "", 
      "cilindrata": "", 
      "potenza": "", 
      "alimentazione": "", 
      "images": { 
       "img": [ 
        { 
         "thumb": "admin/uploads/img_usato/small/qekabw95L5WH1ALf6.jpg", 
         "big": "admin/uploads/img_usato/big/qekabw95L5WH1ALf6.jpg" 
        }, 
        { 
         "thumb": "admin/uploads/img_usato/small/default.jpg", 
         "big": "admin/uploads/img_usato/big/default.jpg" 
        } 
       ] 
      } 
     }, 
     { 
      "titolo": "Motore Volvo TAMD 74 C", 
      "marca": "VOLVO PENTA", 
      "modello": "TAMD 74 C", 
      "cilindrata": "7.283 cm3", 
      "potenza": "331 kW a 2600 rpm", 
      "alimentazione": "Gasolio", 
      "images": { 
       "img": [ 
        { 
         "thumb": "admin/uploads/img_usato/small/PmQwN4t4yp7P1YCWa.jpg", 
         "big": "admin/uploads/img_usato/big/PmQwN4t4yp7P1YCWa.jpg" 
        }, 
        { 
         "thumb": "admin/uploads/img_usato/small/BWkjTGcy3pDM2LKRs.jpg", 
         "big": "admin/uploads/img_usato/big/BWkjTGcy3pDM2LKRs.jpg" 
        } 
       ] 
      } 
     } 
    ] 
} 

Я хочу, чтобы разобрать изображения внутри объекта. API-интерфейс отправить мне объект не astring или JSON и у меня есть эта функция теперь:

function changeData (prodotto:Object) { 
    img_container.graphics.clear(); 

     //here I want to enter and take thumb and big of images!!! 
    for (var index in prodotto.images.img) { 
     //trace('index: ' + index); 
     //trace("thumb: " + index.thumb + ' big: ' + index.big); 
    } 

     descrizione.htmlText = prodotto.testo_html; 
     titolo.text = prodotto.titolo; 
     alimentazione.text = prodotto.alimentazione; 
     potenza.text = prodotto.potenza; 
     cilindrata.text = prodotto.cilindrata; 
     modello.text = prodotto.modello; 
     marca.text = prodotto.marca; 

} 

отлично Функция работает, но не для цикла, где я пытаюсь взять ошибку и большой палец моей JSON как я могу получить эту информацию в этом объекте?

Благодаря

+2

Это не является допустимым JSON, проверьте http://jsonlint.com/ – Ronnie

+0

Вы отставая запятые, которые делают его недействительным. Если это действительно то, что вы получаете от API, и вы не можете его изменить, я предлагаю показать, кто это сделал. Это явно недействительно. – Ronnie

+0

У меня есть обновление моего json, у меня есть ошибка, чтобы скопировать его, но проблема такая же, что и не в том, что @Ronnie –

ответ

0

Я думаю, что есть что-то не так с тем, как вы настраиваете перезвонить, но так как вы не показывать код для API мы не можем исправить это, плюс вы заявили, у вас есть нет контролировать его. Независимо от того, что проблема, это просто не кажется правильным.

Я собрал функцию, которая получит все большие и большие пальцы. Вы не указали иначе.

function changeData (prodotto:Object) { 
    for each(var item in prodotto.prodotti){ 
     trace('') 
     //trace(prodotto.testo_html); 
     trace(item.titolo); 
     trace(item.alimentazione); 
     trace(item.potenza); 
     trace(item.cilindrata); 
     trace(item.modello); 
     trace(item.marca); 
     for each(var imgs in item.images.img) { 
      trace('thumb',imgs.thumb) 
      trace('big',imgs.big) 
     } 
    } 
} 
+0

Мне не нужен цикл, потому что я могу получить другие атрибуты типа «modello», но не атрибуты внутри изображения. Мне нужен цикл только для изображений. Ваш цикл не работает. Спасибо –

+0

Что такое цикл ??? Эта функция будет отслеживать все в вашем объекте json. Вы заявили, что хотите «большой» и «большой». Эта функция дает вам все «большой» и «большой». Никто не может ответить на ваш вопрос так, как вам хочется, если вы не объясните, что хотите. –

+0

Извините цикл означает цикл, петля вне функции, потому что я могу принимать другие атрибуты, но не большой и большой –

0

Я думаю, вам нужно использовать JSON парсер. Используйте одну из этой ссылке: https://github.com/mikechambers/as3corelib

1: Добавить папку com в каталог проекта или добавить его в свой класс по умолчанию путь.

2: Адаптируйте этот код по своему усмотрению. Я не уверен, как вы получаете буквальный объект из API. Это действительно должна быть строка, если вы не используете какой-то AMF. Вне зависимости от ...

import com.adobe.serialization.json.*; 
var data:String = '{"prodotti":[{"titolo":"test","marca":"","modello":"","cilindrata":"","potenza":"","alimentazione":"","images":{"img":[{"thumb":"admin/uploads/img_usato/small/qekabw95L5WH1ALf6.jpg","big":"admin/uploads/img_usato/big/qekabw95L5WH1ALf6.jpg"},{"thumb":"admin/uploads/img_usato/small/default.jpg","big":"admin/uploads/img_usato/big/default.jpg"}]}},{"titolo":"Motore Volvo TAMD 74 C","marca":"VOLVO PENTA","modello":"TAMD 74 C","cilindrata":"7.283 cm3","potenza":"331 kW a 2600 rpm","alimentazione":"Gasolio","images":{"img":[{"thumb":"admin/uploads/img_usato/small/PmQwN4t4yp7P1YCWa.jpg","big":"admin/uploads/img_usato/big/PmQwN4t4yp7P1YCWa.jpg"},{"thumb":"admin/uploads/img_usato/small/BWkjTGcy3pDM2LKRs.jpg","big":"admin/uploads/img_usato/big/BWkjTGcy3pDM2LKRs.jpg"}]}}]}'; 

function changeData(data) 
{ 
    img_container.graphics.clear(); 
    var obj = JSON.decode(data); 

    for (var i:int = 0; i < obj.prodotti.length; i++) 
    { 
     for (var k in obj.prodotti[i].images.img) 
     { 
      trace("Thumb:",obj.prodotti[i].images.img[k].thumb); 
      trace("Big:",obj.prodotti[i].images.img[k].big); 
     } 
     descrizione.htmlText = obj.prodotti[i].testo_html; 
     titolo.text    = obj.prodotti[i].titolo; 
     alimentazione.text  = obj.prodotti[i].alimentazione; 
     potenza.text   = obj.prodotti[i].potenza; 
     cilindrata.text   = obj.prodotti[i].cilindrata; 
     modello.text   = obj.prodotti[i].modello; 
     marca.text    = obj.prodotti[i].marca; 
    } 
} 
changeData(data); 
+0

Я указал, что аргумент передается внешним API, который я могу изменить, я должен использовать переменная типа Object для этого, если бы я мог измениться, я знаю, что ваш путь является лучшим, но не в моем случае, потому что у меня есть объект –

+0

Ну, если это уже объект, то просто попробуйте использовать мой цикл. Все 'JSON.decode()' does преобразуют эту строку в объект. – Ronnie

+0

, но часть других атрибутов была в порядке, мне не нужны атрибуты петли fot hhose, но только для изображений, остальная часть функции в порядке –