我在下面的JSON数据中使用了一个字符串:
您会注意到公司的名称存储在一个字符串中:
即:
"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
关于如何做到这一点的任何建议?或者至少如何从字符串中分离名称(请记住,这是一个数组中的一个,因此解决方案需要处理数据中的所有名称)。
谢谢, 伊万
答案 0 :(得分:1)
有效的JSON字符串很容易变成对象,但是你为“$ t”获得的值不是有效的JSON,并且没有兼容的解析器会触及它(如你所发现的那样)。如果可能(通常不是),你最好的选择是修复发出JSON模仿字符串的代码。但显然这不是一种可能性。
如果您可以信任您的来源以至少在不久的将来以相同的格式继续使用这些内容,那么可以安全地使用丑陋的正则表达式解决方案 - 只需确保它可以处理每个案例的来源可能会产生:
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的魔力“不是数字”值。
答案 1 :(得分:0)
您在寻找JSON.parse(...)
吗?
JSON.parse("{name: ANGLO AMERICAN, price: 1547, change: 8.5}")
产量
{"name": "ANGLO AMERICAN",
"price": 1547,
"change": 8.5}
答案 2 :(得分:0)
对于和我一样的任何人,我设法通过从这个站点下载CSV并将其加载到我的数据库中来解决这个问题:
http://www.ftsefeed.co.uk/api.html
它不像JSON那样活,但似乎避免了Web API中涉及的所有乏味。
如果mongo DB是您的数据库,请点击此处获取更多信息:
how to import csv file in mongodb
ER