1

我有一个巨大的 JSON 字符串,我试图通过命令行解析它。

这是一个例子:

"Product_ID":"productID_1","Price":"$4.99","Cover_Image":"cover.jpg"},{"issue_id":"2","total_article":"36","issue_number":"4","issue_name":"","volume":"57","editors":"","date_of_release":"2013-04-01"

列出了多个问题,所有问题都具有相同的字段。我需要从 JSON 中的每篇文章中提取产品 ID、价格和发布日期,然后从命令行将其写入文本文件。

我在想 awk 是要走的路,但是,因为它将它作为一行读入,我发现它很棘手。

有什么建议/代码示例可以将这些字段拉出来吗?

4

4 回答 4

1

查看 sql4json ( http://github.com/bheni/sql4json )

如前所述,这不是有效的 json。如果您有一个名为 inputfile.json 的文件,其中包含以下内容:

[
   {"Product_ID":"productID_1","Price":"$1.99","Cover_Image":"cover1.jpg","issue_id":"4","total_article":"16","date_of_release":"2013-04-01"},
   {"Product_ID":"productID_2","Price":"$2.99","Cover_Image":"cover2.jpg","issue_id":"5","total_article":"26","date_of_release":"2013-04-02"},
   {"Product_ID":"productID_3","Price":"$3.99","Cover_Image":"cover3.jpg","issue_id":"6","total_article":"36","date_of_release":"2013-04-03"}
]

这应该给你你正在寻找的东西:

sql4json --csv 'SELECT Price, Product_ID, date_of_release' <inputfile.json >outputfile.csv

outputfile.csv 的内容为:

$1.99,productID_1,2013-04-01
$2.99,productID_2,2013-04-02
$3.99,productID_3,2013-04-03
于 2013-12-17T06:55:32.787 回答
0

你很可能已经安装了 python,如果没有,安装它不会有什么坏处。

打印json.py

import json;
import sys;
for obj in json.loads(sys.stdin.readline()):
    print obj['Product_ID']
    print obj['Price']

用法

$ echo '[{"Product_ID":"productID_1","Price":"$4.99","Cover_Image":"cover.jpg"}]' | python printjson.py > outfile

$ cat outfile 
productID_1
$4.99
于 2013-03-28T16:32:25.360 回答
0

作为一项规则......尽量抵制并避免自己解析事物的冲动。您的正则表达式可能会与您的示例 XML 或 JSON 或其他什么一起使用一次或两次,但它是如此冒险!

这是使用 Python 而不使用脚本来提取单个值的行:

davanbri@om: echo $J
{"a":"fish"}
davanbri@om: python -c "import json;print json.loads('$J')['a']"
fish

可能会满足您的需求!或者编写一个实际的 python 脚本并获取您需要的所有值。

于 2013-03-28T16:17:39.033 回答
-1

有一个很棒的工具可以与 jq 配合使用。通常需要过滤一个巨大的文件。所以我的工作流程是我用https://github.com/ilyash/show-struct/解析这是一个小工具,可以将你巨大的 json 变成这样的东西:

.Records -- (Array of 3 elements) .Records[] .Records[].awsRegion -- us-east-1 .Records[].eventName -- DescribeInstances1 .Records[].eventSource -- ec2.amazonaws.com`

那么你可以使用jq,例如。

aws ec2 描述-* | jq .Records[].eventName

JQ 有很多选择,做更多的事情,但这对我有用。

于 2016-06-21T20:36:03.847 回答