【问题标题】:read a part of JSON file读取 JSON 文件的一部分
【发布时间】:2012-05-28 14:02:33
【问题描述】:

我有一个动态创建的 json 文件。 我只想知道“状态”的“错误”部分。有什么简单的方法可以做到这一点?

...
a lot of lines 
...

 "status": {
    "errors": [
      {
        "message": "Input contained no data", 
        "reason": "invalid"
      }
    ], 
    "state": "DONE"
  }
...
a lot of lines
...

我需要在 shell 脚本中使用输出,所以首选 awk。

【问题讨论】:

  • 您应该使用 Python 或 Perl 中的 JSON 解析模块或独立的 JSON 解析器。正则表达式不适合这个任务。
  • 您也可以在 awk 中使用 JSON 解析模块:请参阅 github.com/dubiousjim/awkenough/blob/master/README.lib 并搜索 query_json。只是这样说是为了反驳普遍的误解,即 awk 对于这种事情来说功能太低了。也就是说,我在问题中看不到任何使 awk 比任何其他工具更适合的东西。

标签: json sed awk grep


【解决方案1】:

这可能对你有用:

sed '/^ "status": {/,/^  }$/!d;/^    "errors": \[/,/^    \],/!d' file.txt

【讨论】:

    【解决方案2】:

    我会使用sed 来选择一系列这样的行:

    sed -e '/^    "errors\": \[/,/^    ],/!d' file.txt
    

    结果:

        "errors": [
          {
            "message": "Input contained no data", 
            "reason": "invalid"
          }
        ],
    

    如果我误解了您的问题,请考虑添加预期结果。

    HTH

    【讨论】:

      猜你喜欢
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2012-07-29
      • 1970-01-01
      相关资源
      最近更新 更多