亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
123下一頁
最近訪問板塊 發(fā)新帖
查看: 24452 | 回復(fù): 22
打印 上一主題 下一主題

[學(xué)習(xí)共享] 介紹幾個(gè)處理 JSON 文件的利器 [復(fù)制鏈接]

論壇徽章:
15
2015年辭舊歲徽章
日期:2015-03-03 16:54:15雙魚座
日期:2015-01-15 17:29:44午馬
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉雞
日期:2014-04-02 12:24:51雙子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥豬
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大;照
日期:2013-04-17 11:48:45
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2014-03-11 13:14 |只看該作者 |倒序?yàn)g覽
本帖最后由 rdcwayx 于 2014-03-13 07:47 編輯

不清楚這個(gè)壇子里用到j(luò)son的多不多。 有現(xiàn)成的perl/python模塊可用,可以優(yōu)先考慮。如果考慮用 shell/awk/sed 來提取json文件里的信息的話,可以,但是比較費(fèi)時(shí)費(fèi)力。這里我推薦幾個(gè)工具 (部分就是用shell/awk/sed寫的),如果你碰上類似的JSON文件處理的話,可以省去很多時(shí)間。

先來看一下JSON 文件格式,看這里的介紹
http://en.wikipedia.org/wiki/JSON

json首頁也有很多介紹:
http://json.org/
  1. JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。 易于人閱讀和編寫。同時(shí)也易于機(jī)器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個(gè)子集。 JSON采用完全獨(dú)立于語言的文本格式,但是也使用了類似于C語言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使JSON成為理想的數(shù)據(jù)交換語言。
復(fù)制代碼
這篇文章有中文介紹http://tjbmx0987.iteye.com/blog/225755

貼出個(gè)典型的例子,后面會(huì)用上:

sample1.json
  1. {
  2.     "firstName": "John",
  3.     "lastName": "Smith",
  4.     "age": 25,
  5.     "address": {
  6.         "streetAddress": "21 2nd Street",
  7.         "city": "New York",
  8.         "state": "NY",
  9.         "postalCode": 10021
  10.     },
  11.     "phoneNumbers": [
  12.         {
  13.             "type": "home",
  14.             "number": "212 555-1234"
  15.         },
  16.         {
  17.             "type": "fax",
  18.             "number": "646 555-4567"
  19.         }
  20.     ]
  21. }
復(fù)制代碼
JSON 的格式可以通過一些在線工具審核,因?yàn)槿绻麑懙貌徽_的話,后面介紹的處理工具可能會(huì)出錯(cuò)。

http://jsonlint.com/
http://www.freeformatter.com/json-validator.html

論壇徽章:
15
2015年辭舊歲徽章
日期:2015-03-03 16:54:15雙魚座
日期:2015-01-15 17:29:44午馬
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉雞
日期:2014-04-02 12:24:51雙子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥豬
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [報(bào)告]
發(fā)表于 2014-03-11 13:14 |只看該作者
本帖最后由 rdcwayx 于 2014-03-12 18:31 編輯

第一個(gè)利器:
1. JQ

http://stedolan.github.io/jq/
具體怎么安裝我就不介紹了,網(wǎng)頁上都有, 從下面的例子可以大致了解一下這個(gè)工具的用途,比如:

  1. # 查詢 firstName
  2. $ jq '.firstName' sample1.json     
  3. "John"
復(fù)制代碼
  1. # 查詢 age 以及 第二個(gè)電話號(hào)碼
  2. $ jq '.age , .phoneNumbers[1]' sample1.json   
  3. 25
  4. {
  5.   "number": "646 555-4567",
  6.   "type": "fax"
  7. }
復(fù)制代碼
  1. 查詢符合家庭(home)的電話號(hào)碼(phoneNumbers)
  2. $ jq '.phoneNumbers[]|select (.type=="home")' sample1.json   
  3. {
  4.   "number": "212 555-1234",
  5.   "type": "home"
  6. }
復(fù)制代碼
還有很多方法,自己 man一下吧。

論壇徽章:
15
2015年辭舊歲徽章
日期:2015-03-03 16:54:15雙魚座
日期:2015-01-15 17:29:44午馬
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉雞
日期:2014-04-02 12:24:51雙子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥豬
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大;照
日期:2013-04-17 11:48:45
3 [報(bào)告]
發(fā)表于 2014-03-11 13:15 |只看該作者
本帖最后由 rdcwayx 于 2014-03-12 18:43 編輯

第二個(gè)利器

jsawk (jsawk: It's like awk for JSON, in bash.)

主頁: https://github.com/micha/jsawk

安裝:
  1. curl -L http://github.com/micha/jsawk/raw/master/jsawk > jsawk
  2. chmod 755 jsawk && mv jsawk ~/bin/
復(fù)制代碼
jsawk是個(gè)腳本文件,一千多行。如果你有興趣和時(shí)間的話,可以閱讀一下jsawk的內(nèi)容,或許還能在里面挑錯(cuò)或者提出改進(jìn)意見。
  1. $ wc -l jsawk
  2. 1327 jsawk
復(fù)制代碼
但在用這個(gè)腳本前,要先安裝js
  1. apt-get install spidermonkey-bin
復(fù)制代碼
否則運(yùn)行jsawk時(shí)會(huì)有報(bào)錯(cuò):  "js: command not found"

開始舉例:
  1. #取一個(gè)屬性
  2. $ jsawk 'return this.firstName' < sample1.json
  3. John
  4. # 取多個(gè)屬性
  5. $ jsawk -n 'out(this.firstName,this.lastName)' < sample1.json
  6. ["John","Smith"]
復(fù)制代碼
  1. #將年齡增加一歲 (這個(gè)功能比上面介紹的jq要強(qiáng)大很多)。
  2. $ jsawk 'this.age++' < sample1.json
  3. {"firstName":"John","lastName":"Smith","age":26,"address":{"streetAddress":"21 2nd Street","city":"New York","state":"NY","postalCode":10021},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"fax","number":"646 555-4567"}]}
復(fù)制代碼
  1. # 返回年齡小于30歲的名字
  2. $ jsawk 'if (this.age <= 30) return this.firstName' < sample1.json
  3. John
復(fù)制代碼
  1. # 這里我想取出電話號(hào)碼,但是要用到兩次jsawk命令,大家看看有沒有改進(jìn)的地方
  2. $ jsawk 'return this.phoneNumbers' < sample1.json |jsawk 'return this.number'
  3. ["212 555-1234","646 555-4567"]
復(fù)制代碼

論壇徽章:
15
2015年辭舊歲徽章
日期:2015-03-03 16:54:15雙魚座
日期:2015-01-15 17:29:44午馬
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉雞
日期:2014-04-02 12:24:51雙子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥豬
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大;照
日期:2013-04-17 11:48:45
4 [報(bào)告]
發(fā)表于 2014-03-11 13:15 |只看該作者
本帖最后由 rdcwayx 于 2014-03-13 07:50 編輯

JSON.sh  (a pipeable JSON parser written in Bash)
https://github.com/dominictarr/JSON.sh

這個(gè)工具寫的要簡單些,思路和上面的工具稍有不同。但是我個(gè)人覺得反而更適合shell板塊的人使用,因?yàn)槟憧梢杂凶约旱陌l(fā)揮。
  1. $ ./JSON.sh -l < file
  2. ["firstName"]   "John"
  3. ["lastName"]    "Smith"
  4. ["age"] 25
  5. ["address","streetAddress"]     "21 2nd Street"
  6. ["address","city"]      "New York"
  7. ["address","state"]     "NY"
  8. ["address","postalCode"]        10021
  9. ["phoneNumbers",0,"type"]       "home"
  10. ["phoneNumbers",0,"number"]     "212 555-1234"
  11. ["phoneNumbers",1,"type"]       "fax"
  12. ["phoneNumbers",1,"number"]     "646 555-4567"
復(fù)制代碼
通過這樣的轉(zhuǎn)換, 你就可以方便的用grep 來查詢了,而這個(gè)grep命令是shell板塊的強(qiáng)項(xiàng)。
  1. $ ./JSON.sh -l < file  |grep firstName
  2. ["firstName"]   "John"

  3. $ ./JSON.sh -l < file  |grep type
  4. ["phoneNumbers",0,"type"]       "home"
  5. ["phoneNumbers",1,"type"]       "fax"
復(fù)制代碼
這個(gè)不帶參數(shù)的,有更多的輸出,看你自己的需求。
  1. $ ./JSON.sh < file
  2. ["firstName"]   "John"
  3. ["lastName"]    "Smith"
  4. ["age"] 25
  5. ["address","streetAddress"]     "21 2nd Street"
  6. ["address","city"]      "New York"
  7. ["address","state"]     "NY"
  8. ["address","postalCode"]        10021
  9. ["address"]     {"streetAddress":"21 2nd Street","city":"New York","state":"NY","postalCode":10021}
  10. ["phoneNumbers",0,"type"]       "home"
  11. ["phoneNumbers",0,"number"]     "212 555-1234"
  12. ["phoneNumbers",0]      {"type":"home","number":"212 555-1234"}
  13. ["phoneNumbers",1,"type"]       "fax"
  14. ["phoneNumbers",1,"number"]     "646 555-4567"
  15. ["phoneNumbers",1]      {"type":"fax","number":"646 555-4567"}
  16. ["phoneNumbers"]        [{"type":"home","number":"212 555-1234"},{"type":"fax","number":"646 555-4567"}]
  17. []      {"firstName":"John","lastName":"Smith","age":25,"address":{"streetAddress":"21 2nd Street","city":"New York","state":"NY","postalCode":10021},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"fax","number":"646 555-4567"}]}

  18. $ ./JSON.sh < file  |grep "type.*number"
  19. ["phoneNumbers",0]      {"type":"home","number":"212 555-1234"}
  20. ["phoneNumbers",1]      {"type":"fax","number":"646 555-4567"}
  21. ["phoneNumbers"]        [{"type":"home","number":"212 555-1234"},{"type":"fax","number":"646 555-4567"}]
  22. []      {"firstName":"John","lastName":"Smith","age":25,"address":{"streetAddress":"21 2nd Street","city":"New York","state":"NY","postalCode":10021},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"fax","number":"646 555-4567"}]}

復(fù)制代碼
一共四個(gè)參數(shù),自己要用到的時(shí)候,查一下即可上手。
  1. $ ./JSON.sh -h

  2. Usage: JSON.sh [-b] [-l] [-p] [-h]

  3. -p - Prune empty. Exclude fields with empty values.
  4. -l - Leaf only. Only show leaf nodes, which stops data duplication.
  5. -b - Brief. Combines 'Leaf only' and 'Prune empty' options.
  6. -h - This help text.
復(fù)制代碼
另外還推薦了一個(gè)jsonv.sh的小工具,主要是用來將JSON轉(zhuǎn)換成CSV文件的,有興趣的話,就自己看看吧。

jsonv.sh - A Bash command line tool for converting JSON to CSV
https://github.com/archan937/jsonv.sh

論壇徽章:
2
水瓶座
日期:2014-02-28 14:20:09辰龍
日期:2014-06-16 13:18:51
5 [報(bào)告]
發(fā)表于 2014-03-11 13:19 |只看該作者
坐等更新

論壇徽章:
32
處女座
日期:2013-11-20 23:41:20雙子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00處女座
日期:2014-07-22 17:30:47獅子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥豬
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58處女座
日期:2014-12-02 09:17:52程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-06-16 22:20:002015亞冠之塔什干火車頭
日期:2015-06-20 23:28:22
6 [報(bào)告]
發(fā)表于 2014-03-11 13:30 |只看該作者
之前有不少人來求json格式處理,現(xiàn)在有了這些利器,就可以讓他們直接來這里找了,果斷收藏~

論壇徽章:
3
酉雞
日期:2014-04-23 17:17:56丑牛
日期:2014-05-08 11:41:302015亞冠之德黑蘭石油
日期:2015-08-03 11:14:27
7 [報(bào)告]
發(fā)表于 2014-03-11 13:50 |只看該作者
收藏先,多謝樓主!

論壇徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16賽季CBA聯(lián)賽之北京
日期:2016-07-06 15:42:0715-16賽季CBA聯(lián)賽之同曦
日期:2016-06-12 10:38:0915-16賽季CBA聯(lián)賽之佛山
日期:2016-05-27 11:54:56黃金圣斗士
日期:2015-12-02 11:44:35白銀圣斗士
日期:2015-11-25 14:32:43白銀圣斗士
日期:2015-11-23 12:53:352015亞冠之布里斯班獅吼
日期:2015-10-21 16:55:482015亞冠之首爾
日期:2015-09-01 16:46:052015亞冠之德黑蘭石油
日期:2015-08-31 11:39:192015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-08-28 21:06:5315-16賽季CBA聯(lián)賽之廣東
日期:2016-07-12 14:58:53
8 [報(bào)告]
發(fā)表于 2014-03-11 14:01 |只看該作者
收藏了,我去..版版你太給力了..

論壇徽章:
13
雙魚座
日期:2013-10-23 09:30:05數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-04-20 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-03-09 06:20:002015亞冠之塔什干火車頭
日期:2015-11-02 10:07:452015亞冠之德黑蘭石油
日期:2015-08-30 10:07:07數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-08-28 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龍
日期:2014-12-03 14:45:52酉雞
日期:2014-07-23 09:46:23亥豬
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
9 [報(bào)告]
發(fā)表于 2014-03-12 09:07 |只看該作者
學(xué)習(xí)了,一般不用shell處理這種東西

論壇徽章:
8
技術(shù)圖書徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
10 [報(bào)告]
發(fā)表于 2014-03-12 09:41 |只看該作者
精品貼!!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP