JSON重构(合并内容)与javascript



你能告诉我一些如何用javascript(可以是jQuery)进行排序吗:

"A1" : { "value" : "No data", "href" : "/A1", "tooltip" : {"content" : "A1 No data"} },
    "A2" : { "value" : "1111", "href" : "/A2", "tooltip" : {"content" : "A2 1111 (2013)"} },
    "B1" : { "value" : "2222", "href" : "/B1", "tooltip" : {"content" : "B1 2222 (2010)"} },
    "B1" : { "value" : "3333", "href" : "/B1", "tooltip" : {"content" : "B1 3333 (2009)"} },

我想取得一些成就,比如:

"B1" : { 
        "value" : {"y2009" : "3333", "y2010" : "2222"},
        "href" : "/B1", 
        "tooltip" : {
            "y2009" : {"content" : "B1 3333 (2009)"},
            "y2010" : {"content" : "B1 2222 (2010)"} 
         } 
    }

假设您的数据是一个包含对象的数组,如下所示,您可以迭代并将所有元素分配给一个新的对象结构

var array = [{ "A1": { "value": "No data", "href": "/A1", "tooltip": { "content": "A1 No data" } } }, { "A2": { "value": "1111", "href": "/A2", "tooltip": { "content": "A2 1111 (2013)" } } }, { "B1": { "value": "2222", "href": "/B1", "tooltip": { "content": "B1 2222 (2010)" } } }, { "B1": { "value": "3333", "href": "/B1", "tooltip": { "content": "B1 3333 (2009)" } } }],
    object = {};
array.forEach(function (a) {
    var key = Object.keys(a)[0],
        year = (/(?:()(d{4})(?:))/.exec(a[key].tooltip.content) || [, 'No data'])[1];
    if (!(key in object)) {
        object[key] = { "value": {}, "href": a[key].href, "tooltip": {} };
    }            
    object[key].value[year] = a[key].value;
    object[key].tooltip[year] = a[key].tooltip.content;
});
document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');

正如评论中所指出的,如果不能更改接收到的数据以删除那些重复的属性,您将遭受很大的损失给你的服务人员打电话可能是你最好的选择

然而,如果他特别固执,或者他是你的老板,或者如果他20年前带着服务器源代码的唯一副本离开了公司,你可以抓住这个(在所有浏览器都没有实现本地JSON.parse的旧时代)并分叉它

首先,这将让您了解JSON解析的复杂性,如果您成功地分叉,将为您提供一个不错的解决方案。

我将从步行功能行427:开始

function walk(holder, key) {
// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.

祝你好运:)

最新更新