如何使用jtc在json文件中查找/替换?

如何使用jtc在json文件中查找/替换?,json,jq,mongoimport,jtc,Json,Jq,Mongoimport,Jtc,我有下面的文件。使用如何将所有出现的value:1234.56替换为value:{$numberDecimal:1234.56};也就是说,将数字包装起来。这是针对mongoimport的,我想要求将值作为小数而不是浮点数导入 或者使用jq有更好的解决方案 示例文件: { "data": { "slice": [ { "source": { "id": "foo" }, "value": 1.0

我有下面的文件。使用如何将所有出现的value:1234.56替换为value:{$numberDecimal:1234.56};也就是说,将数字包装起来。这是针对mongoimport的,我想要求将值作为小数而不是浮点数导入

或者使用jq有更好的解决方案

示例文件:

{
  "data": {
    "slice": [
      {
        "source": {
          "id": "foo"
        },
        "value": 1.0
      },
      {
        "source": {
          "id": "bar"
        },
        "value": 2.0
      }
    ]
  }
}

如果我正确理解了这个问题,那么使用最新的jtc构建,您可以这样做:

bash $ <file.json jtc -w'[value]:<>N:' -u'{"$numberDecimal":"{}"};' -tc
{
   "data": {
      "slice": [
         {
            "source": { "id": "foo" },
            "value": { "$numberDecimal": "1.0" }
         },
         {
            "source": { "id": "bar" },
            "value": { "$numberDecimal": "2.0" }
         }
      ]
   }
}
bash $ 

如果我正确理解了这个问题,那么使用最新的jtc构建,您可以这样做:

bash $ <file.json jtc -w'[value]:<>N:' -u'{"$numberDecimal":"{}"};' -tc
{
   "data": {
      "slice": [
         {
            "source": { "id": "foo" },
            "value": { "$numberDecimal": "1.0" }
         },
         {
            "source": { "id": "bar" },
            "value": { "$numberDecimal": "2.0" }
         }
      ]
   }
}
bash $ 

以下jq程序将数字转换为格式为{$numberDecimal:}的JSON对象:

如果您不介意1.0变为1,那么上述内容将适用于任何具有walk的jq版本,前提是转换为ieee754数字不会出现任何问题


否则,最简单的选择可能是升级到jq>1.6的当前主版本,因为此版本应保持精度。

以下jq程序将数字转换为格式为{$numberDecimal:}的JSON对象:

如果您不介意1.0变为1,那么上述内容将适用于任何具有walk的jq版本,前提是转换为ieee754数字不会出现任何问题


否则,最简单的选择可能是升级到jq>1.6的当前主版本,因为这个版本应该保持精度。

到目前为止您尝试了什么?@SoniaHamilton,我不确定我是否理解这个问题,您正在展示包装1234.56值的示例-这是一个浮点值,但接下来您要声明希望值以小数形式导入。您能否澄清一下,或者提供一个预期输出JSON的示例?Hi@Dmitry。Mongo的NumberCIMAL格式在其构造函数中接受字符串或浮点数。为此,在mongoimport导入的JSON文件中,您将1234.56替换为{$numberDecimal:1234.56}。到目前为止,您做了哪些尝试?@Soniahilton,我不确定我是否理解这个问题,您展示了包装1234.56值的示例—这是一个浮点值,但您表示希望将该值作为小数导入。您能否澄清一下,或者提供一个预期输出JSON的示例?Hi@Dmitry。Mongo的NumberCIMAL格式在其构造函数中接受字符串或浮点数。为此,在mongoimport导入的JSON文件中,将1234.56替换为{$numberdCimal:1234.56}。1:1.0不起作用,它必须是$numberdCimal:1.0。看@oguz,啊,我明白了-这是mongodb的规定,不是查询,我更新了解决方案,谢谢!谢谢@Dmitry,它很有效。我会加入一个带有小文档建议的公关。当然@SoniaHamilton,非常欢迎提交公关!谢谢。1:1.0不行,它必须是$numberdCimal:1.0。看@oguz,啊,我明白了-这是mongodb的规定,不是查询,我更新了解决方案,谢谢!谢谢@Dmitry,它很有效。我会加入一个带有小文档建议的公关。当然@SoniaHamilton,非常欢迎提交公关!非常感谢。
walk(if type == "number" then {"$numberDecimal": tostring} else . end)