我想將列表轉換爲JSON數組。我正在尋找jq
,但這些例子主要是關於解析JSON(而不是創建它)。很高興知道正確的轉義會發生。我的列表是單行元素,因此新行可能是最好的分隔符。在bash中將行轉換爲json
回答
我也在嘗試將一串行轉換爲JSON數組,並且處於停頓狀態,直到我意識到-s
是我在jq
表達式中一次處理多行的唯一方法,即使這意味着我不得不手動解析換行符。
jq -R -s -c 'split("\n")' < just_lines.txt
-R
讀取原始輸入-s
讀取所有輸入一個字符串-c
不漂亮的打印輸出
易peasy。
編輯:我在jq
≥1.4,這顯然是當split
內置引入。
看起來很簡單..雖然我無法驗證。我在ubuntu jq 1.3版上遇到錯誤'error:split is not defined' – jcalfee314 2015-01-18 16:18:00
不幸的是,'jq'文檔並沒有說每個內置函數何時被引入,'jq --version'也不會告訴我什麼版本我有,但它至少是1.4,用'brew install jq --HEAD'安裝。好點,但我會編輯答案。 – chbrown 2015-01-18 20:15:19
我喜歡這個答案,除了對於具有尾隨換行符(\ n)的多行輸出,'split'內置函數將在數組中產生額外的空字符串項目:(無論如何解決這個問題? – Devy 2016-10-21 15:46:11
您還可以使用jq -R .
於每行格式化爲JSON字符串,然後jq -s
(--slurp
)以解析它們作爲JSON之後創建用於將輸入線的陣列:
$ printf %s\\n aa bb|jq -R .|jq -s .
[
"aa",
"bb"
]
的方法,chbrown的如果輸入一個換行符結束的答案添加到結束的空元素,但是你可以使用printf %s "$(cat)"
刪除尾隨換行符:
$ printf %s\\n aa bb|jq -R -s 'split("\n")'
[
"aa",
"bb",
""
]
$ printf %s\\n aa bb|printf %s "$(cat)"|jq -R -s 'split("\n")'
[
"aa",
"bb"
]
如果輸入線不包含ASCII控制字符(其中有在有效的JSON字符串進行轉義),你可以使用sed
:
$ printf %s\\n aa bb|sed 's/["\]/\\&/g;s/.*/"&"/;1s/^/[/;$s/$/]/;$!s/$/,/'
["aa",
"bb"]
當從jq到jq的管道輸入時, '漂亮的打印是沒有必要的:'jq -cR。| jq -s .' – ceving 2016-10-27 10:00:59
而不是在一個單獨的調用中sl inputs輸入,只需將原始輸入放入一個數組中''jq -Rn'[inputs]'input.json '。這些都是等價的:'jq -s'。'input.json'和'jq -n'[inputs]'input.json' – 2017-08-10 03:18:52
我在man page發現JQ並通過實驗似乎什麼對我來說是一個更簡單的答案。
$ cat test_file.txt | jq -Rsc './"\n" - [""]'
["aa","bb"]
的-R是不分析JSON閱讀,與-s說,讀所有的輸入作爲一個字符串,和-c是一個行輸出 - 沒有必要的,但它是什麼我在尋找。
然後在字符串我傳遞給jq,'。'說按原樣進行輸入。 '/ \ n'表示在換行符上劃分字符串(將其拆分)。 ' - [「」]'表示從結果數組中刪除任何空字符串(在最後一個額外的換行符導致)。
這是一條線,沒有任何複雜的構造,只使用簡單的內置jq功能。
只是總結一下別人的希望更快地瞭解表格說:
cat /etc/hosts | jq --raw-input . | jq --slurp .
將返回:
[
"fe00::0 ip6-localnet",
"ff00::0 ip6-mcastprefix",
"ff02::1 ip6-allnodes",
"ff02::2 ip6-allrouters"
]
說明
--raw-input/-R:
Don´t parse the input as JSON. Instead, each line of text is passed
to the filter as a string. If combined with --slurp, then the
entire input is passed to the filter as a single long string.
--slurp/-s:
Instead of running the filter for each JSON object in the input,
read the entire input stream into a large array and run the filter
just once.
- 1. 將JSON轉換爲bash環境變量
- 2. 將JSON數組轉換爲Bash數組
- 3. Bash - 將MONGODB BSON轉換爲JSON
- 4. BASH:將多行(JSON)塊轉換爲單行字符串
- 5. 將多行bash轉換爲單行
- 6. 在bash中將stdout轉換爲utf8
- 7. 如何在bash stdout中將多行轉換爲一行?
- 8. 將cygwin bash轉換爲tcsh
- 9. Bash - 將sub.site.com轉換爲com_site_sub?
- 10. 將cshell轉換爲bash
- 11. bash的輸出轉換爲JSON /詞典
- 12. 在bash腳本中將csv轉換爲CRLF行尾
- 13. 在Bash中將命令行參數轉換爲數組
- 14. 將bash換行符轉換爲HTML換行符;在BASH中運行良好,但不通過shell_exec
- 15. 在R中將JSON轉換爲DF
- 16. 在Android中將對象轉換爲JSON
- 17. 在java中將bean轉換爲Json
- 18. 在Java中將JSON轉換爲XML
- 19. 在dataweaver mule中將xml轉換爲json
- 20. 在C++中將JSON轉換爲CSV
- 21. 在Powerquery中將表格轉換爲JSON
- 22. 在ios中將XML轉換爲JSON
- 23. 在extJS中將數組轉換爲JSON
- 24. 在Golang中將結構轉換爲JSON
- 25. 在TSQL中將JSON轉換爲XML?
- 26. 在java servlet中將xml轉換爲JSON
- 27. 在Python中將字典轉換爲JSON
- 28. 在java中將RSS源轉換爲JSON
- 29. 在JavaScript中將NMEA轉換爲JSON
- 30. 在ruby中將.json轉換爲.csv
BTW,本 - 1不是我,但如果我不得不猜測爲什麼它在那裏,那可能是「請爲我做我的工作「這個問題(否則有用和值得,因此我的回答)問題發出。顯示你的工作和你試圖解決這個問題的問題可以避免這種情況。 – 2014-10-09 21:53:21
謝謝,是的,我沒有谷歌。我正在尋找一個小的一行,可能是我在'jq'手冊頁中錯過的東西。感謝您的反饋,即投票是我的。 – jcalfee314 2014-10-09 23:42:08