将JSON对象转换为另一个-格式化它

Transform JSON Object to another - Format It

本文关键字:格式化 另一个 JSON 对象 转换      更新时间:2023-09-26

我想将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"
    ]
] 

您可以循环浏览项目并将它们推送到一个新对象中:

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] );   
}

示例:https://jsfiddle.net/q2Jzb/1/

您可能正在将这些传递给DataTables(使用名称aaData),请注意,DataTables采用对象作为配置,这与JSON不同。

只是使用JSONata库的另一个答案:

使用以下方法可以轻松实现您想要的内容:

$.[id, name]

对于现场演示,请查看:https://try.jsonata.org/UXYx6_xEh

尝试以下操作;

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
    };
}

然后,您可以通过调用use函数;

var newStuff = format(varPointingToOldStuff);

函数期望接收JavaScript对象而不是JSON,并返回JavaScript对象而非JSON。确保您理解JSON(字符串)和JavaScript对象之间的区别。

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

您可以使用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>

您还可以使用JSON路径,并在数据集上使用查询($..id)来产生您想要的结果。结账https://jsonpath.com/?并在左侧框中输入您的数据和$。。JSONPath语法文本框中的id

您可以将其作为字符串替换:

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"answers"name"属性。)

JSONata以正确的方式

出口:

{ "aaData": data.[id, name] }

结果:

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

运行时间:https://try.jsonata.org/Pg51Kzp0c