我有一个字符串im与下面的JSON数据一起使用:
您会注意到公司名称存储在字符串中:
IE:
"content": {
"type": "text",
"$t": "name: ANGLO AMERICAN, price: 1547, change: 8.5"
我的问题是我只想提取公司名称。目前,我只有以下字符串:“名称:ANGLO AMERICAN,价格:1547,更改:8.5”
到达那里是在下面的代码:
$(function() {
$.getJSON("https://spreadsheets.google.com/feeds/list/0AhySzEddwIC1dEtpWF9hQUhCWURZNEViUmpUeVgwdGc/1/public/basic?alt=json", function(data) {
console.log(data.feed.entry[0].content.$t);
var foo = JSON.parse(data.feed.entry[0].content.$t);
console.log(foo);
});
});
但是我希望将字符串变成一组对象,例如:
"name": "ANGLO AMERICAN",
"price": 1547,
"change": 8.5
有关如何执行此操作的任何建议?或至少如何从字符串中分离名称(请记住,这是数组中的一个,因此解决方案需要对数据中的所有名称起作用)。
谢谢,伊万
有效的JSON字符串很容易变成对象,但是您为“ $ t”所获得的值不是有效的JSON,并且没有兼容的解析器会触及它(如您所发现)。如果可能(通常不是),最好的选择是修复发出JSON模仿字符串的代码。但是很显然,这不可能。
如果您可以相信您的源代码至少在不久的将来会继续以相同的格式来处理这些内容,那么可以放心地使用丑陋的regex解决方案-只要确保它可以处理源代码可能产生的每种情况:
function parseCompany(str) {
var re = /name:\s*([^,]+),\s*price:\s*(-?[\d\.]+|#N\/A),\s*change:\s*(-?[\d\.]+|#N\/A)/;
var result = null;
str.replace(re, function ($0, name, price, change) {
result = { name: name,
price: parseFloat(price),
change: parseFloat(change)
};
});
return result
}
var co = parseCompany("name: ANGLO AMERICAN, price: 1547, change: 8.5");
alert(co.name);
co = parseCompany("name: BRIT AMER TOBACCO, price: 3407, change: -8.5");
alert(co.name);
如果存在用于格式(JSON,XML等)的标准解析器,则永远不要使用正则表达式来解析任何内容,但是在这种情况下,您自己就可以了。
如果字段可能会更改顺序,则可能需要将其分解为三个正则表达式。
更新:添加了"#N/A"
对price
和的处理change
。如果这些值是"#N/A"
,它们将以NaN
JavaScript神奇的“非数字”值出现。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句