获取数据后更改json结构

时间:2014-02-13 10:33:39

标签: javascript jquery json

我正在获取具有结构

的json数据
{
    SearchDAO: [
        {
            PERSONADDRESS_H_ADDRESS_LINE_ONE: "599 Waterloo place",
            PERSON_H_BIRTHDATE_VALUE: "1939-01-11 00:00:00",
            PERSON_H_CREATE_TS: "2012-11-22 11:17:13.879",
            PERSON_H_GENDER_CD: "M"
        }
    ]
}

正如您在数据集中看到的那样,有两种类型的键 1.以“PERSONADDRESS”开头 2.以“PERSON”开头

我必须将此结构转换为

{
    "PERSON":[
         {
             H_BIRTHDATE_VALUE: "1939-01-11 00:00:00",
             H_CREATE_TS: "2012-11-22 11:17:13.879",
             H_GENDER_CD: "M"
         }
    ],
    "PERSONADDRESS":[
         {
             H_ADDRESS_LINE_ONE: "599 Waterloo place"
         }
    ]

我正在努力做到这一点。 因为它需要拼接键字符串并改变结构

请帮忙

我正在尝试这样的事情

 $.each(data.SearchDAO[0], function(k, v) {
                               var streetaddress= k.substr(0, k.indexOf('_'));
                               console.log(streetaddress)
                               if(returnVar[streetaddress] == undefined){
                                   thisItem = [];
                                   returnVar[streetaddress]  = thisItem;
                               }
                               else {
                                   thisItem = returnVar[streetaddress];
                               }
                               var obj = {};
                               obj.issueValue = v;
                               thisItem.push(obj);
                           });
 console.log(thisItem)

2 个答案:

答案 0 :(得分:0)

我解决了问题

这是我的代码

   returnVar={};

$.each(data.SearchDAO[0], function(k, v) {
                               var streetaddress= k.substr(0, k.indexOf('_'));
                               var keyFinal= k.substr(k.indexOf('_')+1,k.length-1);
                               console.log(keyFinal)
                               if(returnVar[streetaddress] == undefined){
                                    thisItem = {};
                                    returnVar[streetaddress]  = thisItem;
                                    thisItem[keyFinal]=v;
                                }
                               else {
                                    thisItem = returnVar[streetaddress];
                                    thisItem[keyFinal]=v;
                                }

                            });
                          console.log(returnVar)

答案 1 :(得分:0)

这应该这样做(对于多人而言):

var json = {
    SearchDAO: [
        {
            PERSONADDRESS_H_ADDRESS_LINE_ONE: "599 Waterloo place",
            PERSON_H_BIRTHDATE_VALUE: "1939-01-11 00:00:00",
            PERSON_H_CREATE_TS: "2012-11-22 11:17:13.879",
            PERSON_H_GENDER_CD: "M"
        },
        {
            PERSONADDRESS_H_ADDRESS_LINE_ONE: "123 Place",
            PERSON_H_BIRTHDATE_VALUE: "1901-01-01 00:00:00",
            PERSON_H_CREATE_TS: "2001-01-01 00:00:00.000",
            PERSON_H_GENDER_CD: "F"
        }
    ]
}

var converted = {};
for (var i = 0; i < json.SearchDAO.length; i++)
{
    var row = json.SearchDAO[i];
    var keys = Object.keys(row);
    for (var j = 0; j < keys.length; j++)
    {
        var key = keys[j];
        var key_prefix = key.substr(0, key.indexOf('_'));
        var key_suffix = key.substr(key.indexOf('_') + 1);

        if (!(key_prefix in converted))    converted[key_prefix] = [];
        if (!(i in converted[key_prefix])) converted[key_prefix][i] = {};

        converted[key_prefix][i][key_suffix] = row[key_prefix + "_" + key_suffix];
    }
}