第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用Unix工具解析JSON

使用Unix工具解析JSON

慕工程0101907 2019-05-27 11:17:33
使用Unix工具解析JSON我正在嘗試解析從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% ...如何打印特定字段(用-v k=text?表示)?
查看完整描述

4 回答

?
繁星點點滴滴

TA貢獻1803條經(jīng)驗 獲得超3個贊

要快速提取特定鍵的值,我個人喜歡使用“grep -o”,它只返回正則表達式的匹配。例如,要從推文中獲取“文本”字段,請執(zhí)行以下操作:

grep -Po '"text":.*?[^\\]",' tweets.json

這個正則表達式比你想象的更強大; 例如,它可以很好地處理嵌入了逗號并在其中包含轉(zhuǎn)義引號的字符串。我認為通過更多的工作,你可以制作一個實際上可以保證提取值,如果它是原子的。(如果它有嵌套,那么正則表達式當然不能這樣做。)

為了進一步清潔(雖然保持弦的原始逃逸),你可以使用類似的東西:| perl -pe 's/"text"://; s/^"//; s/",$//'。(我為此分析做了這個。)

對于所有堅持你的仇敵應該使用真正的JSON解析器 - 是的,這對正確性至關(guān)重要,但是

  1. 要做一個非常快速的分析,比如計算值以檢查數(shù)據(jù)清理錯誤或獲得對數(shù)據(jù)的一般感覺,在命令行上敲打一些東西會更快。打開編輯器編寫腳本會分散注意力。

  2. grep -o比Python標準json庫快幾個數(shù)量級,至少在為推文(每個約2 KB)執(zhí)行此操作時。我不確定這是不是因為json速度慢(我應該在某個時候與yajl比較); 但原則上,正則表達式應該更快,因為它是有限狀態(tài)并且更加可優(yōu)化,而不是必須支持遞歸的解析器,并且在這種情況下,為您不關(guān)心的結(jié)構(gòu)花費大量CPU構(gòu)建樹。(如果有人寫了一個有限狀態(tài)傳感器,它做了適當?shù)模ㄉ疃认拗频模㎎SON解析,那就太棒了!同時我們有“grep -o”。)

要編寫可維護的代碼,我總是使用真正的解析庫。我沒有嘗試過jsawk,但是如果它運行良好,那將解決點#1。

最后一個更糟糕的解決方案:我編寫了一個腳本,它使用Python json并將所需的鍵提取到以制表符分隔的列中; 然后我通過一個包裝器管道awk,允許對列進行命名訪問。 在這里:json2tsv和tsvawk腳本。所以對于這個例子,它將是:

json2tsv id text < tweets.json | tsvawk '{print "tweet " $id " is: " $text}'

這種方法沒有解決#2問題,比單個Python腳本效率更低,而且有點脆弱:它強制對字符串值中的換行符和制表符進行規(guī)范化,以便與awk的字段/記錄分隔的世界視圖一起使用。但它確實讓你留在命令行,更正確grep -o。


查看完整回答
反對 回復 2019-05-27
  • 4 回答
  • 0 關(guān)注
  • 805 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號