将JSON字符串转换为Javascript对象

将JSON字符串转换为Javascript对象,json,Json,我从下面的JSON数据中使用了一个字符串: 您会注意到公司名称存储在一个字符串中: 即: 我的问题是,我只想列出公司的名称。目前我只有字符串:“名称:英美资源集团,价格:1547,变更:8.5” 实现这一目标的代码如下: $(function() { $.getJSON("https://spreadsheets.google.com/feeds/list/0AhySzEddwIC1dEtpWF9hQUhCWURZNEViUmpUeVgwdGc/1/public/basic?alt=json"

我从下面的JSON数据中使用了一个字符串:

您会注意到公司名称存储在一个字符串中:

即:

我的问题是,我只想列出公司的名称。目前我只有字符串:“名称:英美资源集团,价格: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
有什么建议吗?或者至少是如何从字符串中分离名称(请记住,这是一个数组中的名称,因此解决方案需要处理数据中的所有名称)

谢谢,
Ewan

您正在寻找
JSON.parse(…)

屈服

{"name": "ANGLO AMERICAN",
"price": 1547,
"change": 8.5}

有效的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”
处理
价格
变更
。如果这些值是
“#N/A”
,它们将显示为
NaN
,JavaScript的神奇“非数字”值

对于与我相同任务的任何人,我已设法通过从该网站下载CSV并将其加载到我的数据库中来解决此问题:

它不像JSON那样生动,但似乎避免了web API中涉及的所有繁琐

如果mongo DB是您的数据库,请在此处查看更多信息:


嗨,安德烈亚斯,谢谢你的回复。是的,我尝试了JSON.pase(你可以在上面的代码中看到,上面的代码是否可以工作?),但是我在控制台中得到了这个?未捕获的语法错误:意外标记a script.js:51@Andreas,当我在Chrome中测试该代码时,它在“name”中的第一个n上抛出了一个异常,因为它不是双引号。“ANGLO AMERICAN”、“price”和“change”也必须双引号,才能接受字符串。请参阅我的更新,我必须在数字字段中添加对“#N/A”的处理。天哪,帝亚吉欧抓住了它的脖子。天啊,谁是帝亚吉欧?谢谢你的帮助,伙计:)
{"name": "ANGLO AMERICAN",
"price": 1547,
"change": 8.5}
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);