2013-08-26 139 views
0

我有一个Flash应用程序,在一个函数中,我必须解析一个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; 

} 

功能工作正常,但不是for循环,我尽量把我的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传递,我可以'修改,我必须使用如果我可以改变,我知道你的方式是最好的,但不是在我的情况下,因为我有一个对象 –

+0

如果它已经是对象,那就试试使用我的循环。所有JSON.decode()都会将该字符串转换为对象。 – Ronnie

+0

但其他属性的部分是好的,我不需要回路fot hhose属性,但只为图像,其余的功能是好的 –