我正在尝试解析从curl请求返回的JSON,如下所示:
curl 'http://twitter.com/users/username.json' |
sed -e 's/[{}]/''/g' |
awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}'
上面将JSON分为多个字段,例如:
% ...
"geo_enabled":false
"friends_count":245
"profile_text_color":"000000"
"status":"in_reply_to_screen_name":null
"source":"web"
"truncated":false
"text":"My status"
"favorited":false
% ...
如何打印特定字段(由-vk=text )?
#1楼
您可以使用jshon :
curl 'http://twitter.com/users/username.json' | jshon -e text
#2楼
使用PHP CLI解析JSON
可以说是题外话,但是由于优先权占据主导地位,因此这个问题在不提及我们可靠和忠实的PHP的情况下仍然是不完整的,对吗?
使用相同的示例JSON,但让我们将其分配给变量以减少模糊性。
$ export JSON='{"hostname":"test","domainname":"example.com"}'
$ echo $JSON|php -r 'echo json_decode(file_get_contents("php://stdin"))->hostname;'
或使用fgets指出并在CLI常量STDIN处已打开的流。
$ echo $JSON|php -r 'echo json_decode(fgets(STDIN))->hostname;'
欢乐!
#3楼
您可以为您的平台下载jq二进制文件并运行( chmod +x jq ):
$ curl 'https://twitter.com/users/username.json' | ./jq -r '.name'
它从json对象中提取"name"属性。
jq主页说它就像sed一样用于JSON数据。
#4楼
也有xml文件的人可能想看看我的Xidel 。 这是一个cli,无依赖项的JSONiq处理器。 (即,它还支持XQuery进行xml或json处理)
问题中的示例为:
xidel -e 'json("http://twitter.com/users/username.json")("name")'
或使用我自己的非标准扩展语法:
xidel -e 'json("http://twitter.com/users/username.json").name'
#5楼
使用Node.js
如果系统已安装节点 ,则可以使用-p print和-e带有JSON.parse脚本标志来提取所需的任何值。
一个使用JSON字符串{ "foo": "bar" }并提取“ foo”值的简单示例:
$ node -pe 'JSON.parse(process.argv[1]).foo' '{ "foo": "bar" }'
bar
由于我们可以访问cat和其他实用程序,因此可以将其用于文件:
$ node -pe 'JSON.parse(process.argv[1]).foo' "$(cat foobar.json)"
bar
或任何其他格式,例如包含JSON的URL:
$ node -pe 'JSON.parse(process.argv[1]).name' "$(curl -s https://api.github.com/users/trevorsenior)"
Trevor Senior