使用Unix工具解析JSON

我正在嘗試解析從curl請求返回的JSON,以下所示: php

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分爲多個字段,例如: html

% ...
"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 )? node


#1樓

您能夠使用jshongit

curl 'http://twitter.com/users/username.json' | jshon -e text

#2樓

使用PHP CLI解析JSON

能夠說是題外話,可是因爲優先權佔據主導地位,所以這個問題在不說起咱們可靠和忠實的PHP的狀況下仍然是不完整的,對嗎? github

使用相同的示例JSON,但讓咱們將其分配給變量以減小模糊性。 web

$ export JSON='{"hostname":"test","domainname":"example.com"}'

如今,爲了使用PHP,使用file_get_contentsphp:// stdin流包裝器。 json

$ echo $JSON|php -r 'echo json_decode(file_get_contents("php://stdin"))->hostname;'

或使用fgets指出並在CLI常量STDIN處已打開的流。 api

$ echo $JSON|php -r 'echo json_decode(fgets(STDIN))->hostname;'

歡樂! dom


#3樓

您能夠爲您的平臺下載jq二進制文件並運行( chmod +x jq ): curl

$ 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
相關文章
相關標籤/搜索