【问题标题】:JSON to JSON mapping using Mustache使用 Mustache 的 JSON 到 JSON 映射
【发布时间】:2016-07-19 11:08:36
【问题描述】:

我想使用 mustache 将我的输入 JSON 映射到另一个 JSON。

我的输入 JSON 是这样的:

{
  "data": [
    { "catalogId": "1850", "productId": "ELEC004A"},
    { "catalogId": "1851", "productId": "PNG679"}
  ]
}

我想要一个模板,我可以在其中将胡须标签与我的输出 json 结合起来。

var template = JSON.stringify(
  {
    Product: [
      {{#data}}
      {
        productId:'{{productId}}',
        parentProductId:'{{catalogId}}'
      }
      {{/data}} 
    ]
  }
);

我试过了,但是使用带有 JSON 的 mustache 标记会给我错误。 我尝试在不使用 JSON.stringify 的情况下定义模板,但没有运气!

必须使用mustache,因为它是必需的,实际输入的JSON非常大,无法使用传统方式映射它。

【问题讨论】:

  • 你想要的输出是什么?为什么要留胡子?为什么不只是常规的 javascript 代码?
  • 您可能需要检查您的代码格式。
  • @TamasHegedus 我想要的输出是模板中提到的 JSON,用我输入 JSON 中的相关数据替换了小胡子标签
  • 据我了解,您传递给 JSON.stringify() 的参数被解释为一个对象,但包含胡须标签​​(例如 {{#data}})。这会导致 JSON 语法不正确。将模板转换为字符串,不要使用 JSON.stringify()
  • @StefanReimers 是的,你是对的!但即使我删除 stringify 并执行正常的 toString 我得到unexpected token { on {{#data}}

标签: javascript json mustache


【解决方案1】:

我想要的输出是模板中提到的 JSON,用我的输入 JSON 中的相关数据替换了小胡子标签

这里不需要小胡子。

var input = {
  "data": [
    { "catalogId": "1850", "productId": "ELEC004A"},
    { "catalogId": "1851", "productId": "PNG679"}
  ]
};

var output = {
  Product: input.data.map(item => ({
    productId: item.productId,
    parentProductId: item.catalogId
  }))
};

console.log(output);

【讨论】:

  • 我只需要使用 mustache,这只是一个示例 JSON,我的实际 JSON 非常大,无法使用传统技术进行映射。
  • 恐怕这是更难的方法,而且更容易出错。让我们看看我们能做些什么
  • @Abhishek Mustache 无法做到这一点。您不能生成例如逗号分隔的列表。除了模板之外,您最终将得到的只是 50% 的样板和变通方法代码。见stackoverflow.com/questions/6114435/…
猜你喜欢
  • 1970-01-01
  • 2017-05-02
  • 2013-10-10
  • 1970-01-01
  • 2019-05-27
  • 2013-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多