Shell
如何從給定的字元串中獲取 JSON STRING
我在下面給出了一個字元串。我只需要獲取第一個accountHeader(粗體)JSON 字元串。
<START AdditionalInfo#:>[FormsGenerationServiceImpl::, accountNumber:ABC07667 , [Source System Request : {"Info":{"Holder": {"nameData": {"shortName": "McIntosh"}},**"accountHeader": {"a": "Y","b": "1","c": "4","draft": "P","e": "Y0000DU9","f": "T","g": "1"}**,"forms": {"maskSSN": "N","deliverForms": "G","selectedForms": {"T5": ["F10"],"T1": ["F1403"],"T2": ["F100001401"]}},"accountHeader": {"a": "Y","b": "1","c": "4","d": "HWA","draftRequestType": "P","e": "Y0000DU9","f": "T","g": "1"}}} ], null]<AdditionalInfo#: END>
我的輸出應該是
"accountHeader": {"a": "Y","b": "1","c": "4","draft": "P","e": "Y0000DU9","f": "T","g": "1"}
這裡有幾個選項:
grep
與標誌一起使用以-o
僅列印行的匹配部分並過濾以head
僅獲取第一個匹配項:grep -o '"accountHeader[^}]*}' file.json | head -n1
正則表達式查找 a
"accountHeader
then 盡可能多的非}
字元,直到第一個}
。它與下面其他解決方案中使用的正則表達式基本相同。 2. 使用sed
with-n
來禁止列印,並p
在替換成功後才列印。然後,替換(刪除)除您想要的之外的所有內容:sed -n 's/.*\("accountHeader[^}]*}\).*/\1/p' file.json
- 使用 Perl,為每個呼叫
-l
添加一個換行符,這意味著“處理輸入文件的每一行”並應用由給出的腳本:print``-n``-e
perl -lne '/.*("accountHeader[^}]*})/ && print $1' file.json
- 使用
awk
,這假設**
您的範例輸入中的 用於突出顯示您感興趣的部分並且實際上並不存在於真實數據中。如果是這樣,這應該工作:awk -F'},' '{print $2"}"}' file.json
如果
**
確實存在,事情就更簡單了,只需將它們用作欄位分隔符:awk -F'**' '{print $2"}"}' file.json
或者
perl -F"\*\*" -alne 'print $F[1]' file.json