我正在嘗試解析從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
您能夠使用jshon
: git
curl 'http://twitter.com/users/username.json' | jshon -e text
能夠說是題外話,可是因爲優先權佔據主導地位,所以這個問題在不說起咱們可靠和忠實的PHP的狀況下仍然是不完整的,對嗎? github
使用相同的示例JSON,但讓咱們將其分配給變量以減小模糊性。 web
$ export JSON='{"hostname":"test","domainname":"example.com"}'
如今,爲了使用PHP,使用file_get_contents和php:// 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
您能夠爲您的平臺下載jq
二進制文件並運行( chmod +x jq
): curl
$ curl 'https://twitter.com/users/username.json' | ./jq -r '.name'
它從json對象中提取"name"
屬性。
jq
主頁說它就像sed
同樣用於JSON數據。
也有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'
若是系統已安裝節點 ,則能夠使用-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