【问题标题】:Fetch data based on key根据key获取数据
【发布时间】:2017-12-19 20:28:20
【问题描述】:
{ "Labels": [ {"Test": 99.25341796875, "Name": "Skateboard" }, { "Test": 9.25341796875, "Name": "Sport" }, { "Test": 49.24723052978516, "Name": "People" }]}

我需要根据以下情况删除测试标签 如果测试值 >50 则替换 Test=Major 如果测试值

所以这里请求的输出如下所示。

{ "Labels": [ {"High": 99.25341796875, "Name": "Skateboard" }, { "Low": 9.25341796875, "Name": "Sport" }, { "Low": 49.24723052978516, "Name": "People" }]}

【问题讨论】:

  • 您是否将这些内容序列化为对象?像在 Java 或 C# 中一样?
  • 感谢 Alex 格式化。我在 Perl/Unix 中需要它。
  • #!/usr/bin/perl 使用 JSON;使用 Data::Dumper; $json ='{“标签”:[{“信心”:99.25341796875,“姓名”:“滑板”},{“信心”:9.25341796875,“姓名”:“运动”},{“信心”:49.24723052978516,“姓名": "人" }]}'; $text = decode_json($json);打印转储器 $text; $key = "信心"; if (exists($text{$key})) { print "Found Confidence\n"; #sed 我需要使用 Confidence 50 的检查条件来申请,并将标签替换为 monor 和 major } else { print "Could not find Confidence";这就是我到目前为止所做的。请建议
  • 请更新您的代码,以便于阅读

标签: json perl unix key


【解决方案1】:

jq解决方案:

jq '.Labels |= map(.[(if .Confidence > 50 then "High" else "Low" end)]= .Confidence | del(.Confidence))' yourfile.json

输出:

{
  "Labels": [
    {
      "Name": "Skateboard",
      "High": 99.25341796875
    },
    {
      "Name": "Sport",
      "Low": 9.25341796875
    },
    {
      "Name": "People",
      "Low": 49.24723052978516
    }
  ]
}

【讨论】:

  • @PraveenPokharia,我不是亚历克斯
  • 我无法将上述命令的输出重定向到文件。请建议。它正在屏幕上显示。
  • 我试过了,但它不起作用.. jq '.Labels |= map(.[(if .Confidence > 50 then "High" else "Low" end)]= .Confidence | del (.Confidence))' $filename.json > $filename1.json
  • 它正在制作一个文件,但内容没有改变,我们用 jq 改变了:)。请建议将来自您的查询的相同输出保留在文件中。
  • 我得到了输出,但它在 1 个文件中。我已经申请了循环来迭代 10 个文件并将 10 个文件的 json o/p 重定向到 1 个文件中,因为它看起来很笨拙。
猜你喜欢
  • 2017-10-12
  • 2021-08-30
  • 2013-01-21
  • 2021-07-23
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 2019-06-23
相关资源
最近更新 更多