在AS3中转换JSON/XML
在项目中使用FlashDevelop,并切换到FDT/Eclipse。我正在对代码中的数百个警告进行排序 相当多的内容与该项目使用的XML和JSON语法有关。在下文中,我不确定如何将包含数据的XML转换为编译器可以识别的格式 例如:在AS3中转换JSON/XML,xml,actionscript-3,json,casting,Xml,Actionscript 3,Json,Casting,在项目中使用FlashDevelop,并切换到FDT/Eclipse。我正在对代码中的数百个警告进行排序 相当多的内容与该项目使用的XML和JSON语法有关。在下文中,我不确定如何将包含数据的XML转换为编译器可以识别的格式 例如: public function convertXMLToAssets(file:XML):void { var data:XML = new XML(file.data); var id:int = data.item.id; //etc }
public function convertXMLToAssets(file:XML):void
{
var data:XML = new XML(file.data);
var id:int = data.item.id;
//etc
}
//gives Warning: Could not resolve variable (may be a dynamic member) data at line 59
因为E4X中的所有内容都是XML对象或字符串,所以我非常怀疑
data.item[I].id
是否可以是数字。如果ID是浮点,则使用parseFloat(data.item[i].ID)
,如果它只是一个int,则使用+data.item[i].ID
编辑:是否有多个
?如果是这样,我想您需要数据..item[0].id
。以下是一些我认为你可能想尝试的东西:
data..item[0].id
data..item[0]。@id
data.id
数据。@id
另外,我没有看到“I”变量的声明,它是类成员吗?这不是警告,这是一个真正的错误。。。字符串没有属性数据,正如Cay提到的。。。我想知道你是怎么用FD编译的。。。你是用CS3还是用FlexSDK编译的 应该是这样的
var data:XML = XML(file);
var id:int = data.item.id;/*if your xml looks something like
<%ROOT%>
<item>
<id>%SOMEINT%</id>
</item>
</%ROOT%>*/
JSON和XML有着极其不同的语义,XMLNode
,您提到的是ActionScript 2遗留版本,您不应该使用。。。无意冒犯,但我认为您应该看看JSON或XML/E4X教程,因为您编写的代码和您所说的,不知怎的让我相信,您不理解一些基本的东西,例如一般过程:
源字符串--解析/解组-->中间对象树--遍历-->提取的数据
您既不能直接对源字符串进行操作,也不能自由交换中间对象树,因此遍历也取决于使用的数据编码格式(您不能使用E4X遍历解析的JSON,但JSON是ActionScript值的语义等价表示)我使用了一个技巧来避免这些警告 您可以使用data['item']['id']来代替data.item.id符号 是的,这有点难看,但是用这个符号你不会得到警告
不要滥用这种符号,因为这样可以避免任何编译时检查。只在你确信它是正确的地方使用,否则就无法摆脱警告。例如,对于XML数据,如您所示。如果我解析或转换float/int/Number,“item”仍然不是一个可识别的可解析变量,并且正在抛出一个警告(仅使用FDT/Eclipse)@cat biscuite:您能编辑您的原始帖子以显示如果您尝试解析/转换时的错误吗?啊,我的错误。我将编辑示例代码。那是我的问题。。。我想知道,人们在使用JSON时是如何解决这个问题的,比如将其转换为XMLnode?也许我应该忽略警告我为错误道歉,我不能很好地检查它!在比较XML和JSON/对象数组等时,我的观点是转换编译器不知道存在的参数/变量。由于警告出现在常见的库文件中,比如Tweener,我经常使用,所以我不必太担心,但我想知道是否有其他方法可以转换XML或对象。同时,我将尝试更改FDT中的设置
var data:XML = JSON.decode(file);
var id:int = data.item.id;/*if your JSON looks something like
{ item : { id: %SOMEINT% } }