我需要用javascript解析这个json
{
"MasterProducts": {
"MasterProduct": [
{
"Productcode": "0903-000192",
"Description": "ICROCOMPUTER;32FX200 24BIT QFP 132P",
"ThumbPic": "NoImage.png",
"RRP": "41.400000",
"Stock": "0"
},
{
"Productcode": "0160-030",
"Description": "AXIS MPEG-4 Decoder 50-user licence pack onto 50 separate computers. For all Axis MPEG-4 products that do not support AAC audio encoding. (210 211 210A 211A 213 214 221 225FD 231D+ 232D+ 241S 241Q 241SA 241QA 242SIV 243SA 282 282A).",
"ThumbPic": "NoImage.png",
"RRP": "35.230000",
"Stock": "0"
},
{
"Productcode": "0160-040",
"Description": "AXIS MPEG-4 +ACC Decoder 50-user license onto 50 separate computers. For all Axis products that supports MPEG-4. (207 207W 207MW 212PTZ 216FD 223M).",
"ThumbPic": "NoImage.png",
"RRP": "50.880000",
"Stock": "0"
},
{
"Productcode": "10403E",
"Description": "Hotsync palm computer cradle/docking station",
"ThumbPic": "NoImage.png",
"RRP": "0.000000",
"Stock": "2"
},
{
"Productcode": "0903-000193",
"Description": "ICROCOMPUTER;32FX200 24BIT QFP 132P",
"ThumbPic": "NoImage.png",
"RRP": "37.790000",
"Stock": "0"
}
]
}
}
我设法做到这一点只有一个结果与此代码
if(data !== '')
{
xmlData = data.childNodes[0].childNodes[0].data;
objData = app.XML2OBJ(xmlData);
var item = objData.MasterProduct.Description;
//alert(item);
}
但无法让它与多组结果一起使用。
答案 0 :(得分:1)
你不需要解析它,JSON是JavaScript对象的制作方式。
// alerting each product description:
for(var product in data.MasterProducts.MasterProduct){
// "product" is the current iteration in the products array
alert(product.Description);
// You can access all the product properties here.
alert(product.Productcode);
}
应该这样做。现在,假设有机会只返回1个主产品,那么MasterProducts属性不是数组,而是一个对象,上面的for循环可能会中断。防止这种情况的最简单方法是在循环之前将MasterProducts连接成一个空数组。可能会有轻微的性能损失,但我并不认为它至关重要。
// Concat to empty array first
data.MasterProducts.MasterProduct = [].concat(data.MasterProducts.MasterProduct);
// alerting each product description:
for(var product in data.MasterProducts.MasterProduct){
// "product" is the current iteration in the products array
alert(product.Description);
// You can access all the product properties here.
alert(product.Productcode);
}
我把答案写成循环,因为我想要处理所有产品。 如果您只想访问第一个产品,则可以访问产品阵列:
data.MasterProducts.MasterProduct[0].Description
答案 1 :(得分:0)
正如人们在上述评论中讨论过的那样,您只需使用普通的vanilla JavaScript即可访问数据。
var data = // JSON
console.log(data.MasterProducts.MasterProduct[0].Productcode);
会给你0903-000192
。包含方括号[]
的对象是数组。对于他们,您可以使用arr[0]
的数组表示法。对于对象,您可以使用它们的键名。
{
"MasterProducts": {
"MasterProduct": [
{
"Productcode": "0903-000192",
"Description": "ICROCOMPUTER;32FX200 24BIT QFP 132P",
"ThumbPic": "NoImage.png",
"RRP": "41.400000",
"Stock": "0"
}
]
}
MasterProducts
是您的根对象,因此您可以将其用作入口点。
var products = data.MasterProducts;
现在,要获取产品列表的第一个元素,可以使用数组表示法。
products.MasterProduct[0]
要获取该元素的其中一个属性,您可以再次使用点符号 -
products.MasterProduct[0].Description //"ICROCOMPUTER;32FX200 24BIT QFP 132P"
答案 2 :(得分:0)
json是javascript原生的 - 不需要解析器。
但我会告诉你如何使用NPEG解析任何类型的文件,包括json。
您也可以使用 https://github.com/leblancmeneses/NPEG/tree/master/Languages/npeg_javascript
这是一个可以导出C版本的可视化工具:http://www.robusthaven.com/blog/parsing-expression-grammar/npeg-language-workbench
规则语法的文档:http://www.robusthaven.com/blog/parsing-expression-grammar/npeg-dsl-documentation
规则
S: [\s]*;
(?<StringValue>): '"' (?<String> [^"]+) '"' / "'" (?<String> [^']+) "'";
(?<NumberValue>): [0-9]+ ('.' [0-9]+)?;
(?<KeyValuePair>): ( '"' (?<Key>[^"]+) '"' / "'" (?<Key> [^']+) "'" ) S ':' S (StringValue / NumberValue / ValueRecursive) S;
(?<Object>): '{' S ( S KeyValuePair S ','? )* S '}';
(?<Array>): '[' S ( S Object S ','? )* S ']';
ValueRecursive: Array / Object ;
(?<JSON>): S ValueRecursive S;
输入我试过: 这个问题和http://en.wikipedia.org/wiki/JSON上的第一个输入。