2012-01-26 39 views
1

我想将json formated输出转换为另一个。 我该怎么做?将JSON对象转换为另一个 - 格式化

实施例: 旧JSON

"data": 
[ 
    { 
     "id" : "e49e183e-9325-4e62-8eda-7e63fb7cdbbd", 
     "name" : "test" 
    }, 
    { 
     "id" : "ac310894-d808-447b-a189-d07edb7f6dd7", 
     "name" : "test2" 
    } 
] 

新的Json,我想不与托架括号只有这样

"aaData": 
[ 
    [ 
     "e49e183e-9325-4e62-8eda-7e63fb7cdbbd","test" 
    ], 
    [ 
     "ac310894-d808-447b-a189-d07edb7f6dd7","test2" 
    ] 
] 
+0

这并不完全正确 - 应该在旧格式和新格式中使用一对花括号吗? – nnnnnn

+0

我需要这个括号中的第二个 –

+0

第二个格式不是有效的JSON,所以你不能使用Javascript JSOn库。你可以'JSON.stringify()'你的JSON对象,然后做一个字符串替换来替换所有'{'''''''。 – xbonez

回答

8

你可以只通过项目环和他们推到一个新的对象:

var len = old.data.length, 
    newData = {aaData:[]}, 
    i; 

for (i=0; i < len; i+=1) { 
    newData.aaData.push([ old.data[ i ].id, old.data[ i ].name]); 
} 

例如:http://jsfiddle.net/q2Jzb/1/

你可能通过这些以数据表(如您使用的名称aaData),注那DataTables takes an object as the configuration,它不同于JSON。

1

尝试使用以下;

function format(oldFormat) { 
    var newFormat = []; 

    oldFormat = oldFormat.data; 

    for (var i=0;i<oldFormat.length;i++) { 
     newFormat.push([oldFormat[i].id], oldFormat[i].name); 
    }; 

    return { 
     aaData: newFormat 
    }; 
} 

然后你可以使用函数调用;

var newStuff = format(varPointingToOldStuff); 

该函数期望接收JavaScript对象而不是JSON,并返回一个JavaScript对象而不是JSON。 Make sure you understand the differences between a JSON (string) and a JavaScript object

您可以使用JSON.parse(yourJsonString)将JSON字符串转换为JavaScript对象,并且可以使用JSON.stringify(yourJavaScriptObject)将JavaScript对象转换为JSON字符串。

1

你可以只是做它作为一个字符串替换:

newJSON = oldJSON.replace(/"id" : |"name" : /g, "") 
       .replace(/{/g, "[").replace(/}/g, "]"); 

但是,这是一种不可靠的。另一种方法是解析JSON,然后处理由此产生的对象,然后把结果返回到JSON:

var oldData = JSON.parse(oldJSON)["data"], 
    aaData = [], 
    arr, 
    newJSON, 
    i, k; 

for (i = 0; i < data.length; i++) { 
    arr = []; 
    for (k in data[i]) 
     arr.push(data[i][k]); 
    aaData.push(arr); 
} 

newJSON = JSON.stringify({ "aaData" : aaData }); 

哪里oldJSON是从你的问题的旧格式的字符串。 (我刚刚绕过每个数组项目中的属性,而不是假设它们始终具有“id”和“name”属性)。

1

您可以使用JavaScript将输入数据转换为新的对象形式然后使用JSON JavaScript库(JSON.stringify函数,请参阅更多此处的http://www.json.org/js.html)将新创建的对象转换为适当的JSON。以下代码使用jQuery和JSON库来解决您的问题。 jQuery的使用纯粹是可选的,还有其他库可以用来制作JSON。

<pre id="code"></pre> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     var old = { "data": 
      [ 
       { 
        "id": "e49e183e-9325-4e62-8eda-7e63fb7cdbbd", 
        "name": "test" 
       }, 
       { 
        "id": "ac310894-d808-447b-a189-d07edb7f6dd7", 
        "name": "test2" 
       } 
      ] 
     }; 

     var newData = []; 
     for (var i = 0, l = old.data.length; i < l; i++) { 
      var o = old.data[i]; 
      newData[i] = [o.id, o.name]; 
     } 
     $("#code").text(JSON.stringify(newData)); 
    }); 
</script>