【问题标题】:Reading JSON data in a shell script在 shell 脚本中读取 JSON 数据
【发布时间】:2014-06-25 10:54:34
【问题描述】:

我有一个包含一些图像数据的 JSON 文件:

{
    "imageHeight": 1536,
    "sessionID": "4340cc80cb532ecf106a7077fc2a166cb84e2c21",
    "bottomHeight": 1536,
    "imageID": 1,
    "crops": 0,
    "viewPortHeight": 1296,
    "imageWidth": 2048,
    "topHeight": 194,
    "totalHeight": 4234
}

我希望在 shell 脚本中以简单的方式处理这些值。我在网上搜索,但找不到任何简单的材料可以理解。

编辑:我希望对这些值做什么?

我正在使用 convert (Imagemagick) 来处理图像。所以,整个工作流程是这样的。从 json 文件中的一行读取一个条目说裁剪,然后使用该值裁剪图像:

convert -crop [来自json的图像宽度]x[来自json的图像高度]+0+[来自json的裁剪值] [来自json的session_id]-[来自json的imageID].png [sessionID]-[ImageID]-cropped .png

【问题讨论】:

  • 我高度评价 jq 在 shell 中使用 JSON:stedolan.github.io/jq
  • 使用 python 或 perl 是一种选择吗?它们都对使用 json 文件有很好的支持。 json-support 在 awk、grep 或 shell 中均不受本机支持。
  • 您也可以在 python 中提供解决方案,这可能会有所帮助:)
  • ...另外,您想对这些值做什么,即您的预期结果是什么?请更新您的问题。现在我们只是猜测。
  • @cbuckley 请您提供一个关于如何处理 json 文件中一行中的字段的示例

标签: json shell awk grep


【解决方案1】:

我建议使用jq。例如,要获取imageHeight,您可以使用:

jq ".imageHeight" data.json

输出:

1536

如果要将值存储在 shell 变量中,请使用:

variable_name=$(jq ".imageHeight" data.json)

【讨论】:

  • 太棒了:) 非常感谢!
【解决方案2】:

Python 解决方案

import json
from pprint import pprint
json_data=open('json_file')
data = json.load(json_data)
pprint(data)
data['bottomHeight']

输出:

In [28]: pprint(data)
{u'bottomHeight': 1536,
 u'crops': 0,
 u'imageHeight': 1536,
 u'imageID': 1,
 u'imageWidth': 2048,
 u'sessionID': u'4340cc80cb532ecf106a7077fc2a166cb84e2c21',
 u'topHeight': 194,
 u'totalHeight': 4234,
 u'viewPortHeight': 1296}

In [29]: data['bottomHeight']
Out[29]: 1536

【讨论】:

  • 谢谢。非常感谢您的帮助:)
猜你喜欢
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多