【问题标题】:How to convert a JSON string to a JSON string with a different structure如何将 JSON 字符串转换为具有不同结构的 JSON 字符串
【发布时间】:2013-01-12 00:54:54
【问题描述】:

我正在构建一个应用程序,其中从第三方系统检索数据作为 JSON 字符串。我需要将此 JSON 字符串转换为具有不同结构的另一个 JSON 字符串,以便它可以与内部 Javascript 库中定义的预先存在的函数一起使用。

理想情况下,我希望能够使用 Javascript 在客户端计算机上执行此转换。

我已将 JSONT 视为实现此目的的一种手段,但该项目似乎没有得到积极维护:

http://goessner.net/articles/jsont/

有没有事实上的方法来实现这一点?还是我必须滚动自己的映射代码?

【问题讨论】:

  • 我很抱歉,这似乎是这个问题的副本:stackoverflow.com/questions/2514795/convert-json-structure 从接受的答案看来,没有“聪明”的方法可以做到这一点,所以看起来我必须推出自己的转换器根据上面答案中给出的示例,在 Javscript 中编写代码。
  • Array.prototype.map 非常聪明。看我的回答,如果你真的想要 JSON 最后,你只需要在处理后的数组上调用JSON.stringify
  • 是的,它看起来确实是对上面线程中给出的答案的一个很好的增强。谢谢你。

标签: javascript json


【解决方案1】:

您不应该将 JSON 传递到内部 JavaScript 库中。您应该将 JSON 解析为 JS 对象,然后对其进行迭代,将其转换为新格式

例子

var json = '[{"a": 1:, "b": 2}, {"a": 4:, "b": 5}]';
var jsObj = JSON.parse(json);
// Transform property a into aa and property b into bb
var transformed = jsObj.map(function(obj){
    return {
       aa: obj.a,
       bb: obj.b
    }
});

// transformed = [{aa:1, bb:2},{aa:4, bb:5}]

If you really want JSON you'd just call JSON.stringify(transformed)

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map

这是另一个更复杂的转换答案How to make a jquery Datatable array out of standard json?

【讨论】:

    【解决方案2】:

    从我的主页可以看出,JSONT 项目是关于将 JSON 转换为完全不同的格式(即 JSON => HTML)。

    编写自己的映射代码会简单得多,可能就像您正在创建的对象上的from_json() 方法一样(因此YourSpecialObject.from_json(input); 返回从JSON 数据生成的该对象的实例)。

    根据您的问题,我不确定这是否适合您的用例,但希望其他人很快就会有更好的答案。

    【讨论】:

      【解决方案3】:

      另一个选择是使用 XSLT。由于 JSON 有 SAX 读取器和写入器,因此您可以愉快地使用带有 JSON 的 XSLT 编写。没有可怕的 JSON 到 XML 并且需要继续进行反向转换。见:http://www.gerixsoft.com/blog/json/xslt4json

      我绝对可以看到使用基于 XML 的语言来转换 JSON 的讽刺意味——但这似乎是一个不错的选择。

      否则你可能最好编写自己的映射代码。

      【讨论】:

      • 我讨厌 XSLT,请不要开始将它用于 JSON
      • 感谢您提供替代方法。我也不是 XSLT 的粉丝。 XML 编程实在是太笨拙了。我会记住这一点,因为你永远不知道替代品在哪里证明是有价值的。
      猜你喜欢
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 2018-06-28
      • 2015-02-19
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多