Shell

如何從給定的字元串中獲取 JSON STRING

  • November 21, 2018

我在下面給出了一個字元串。我只需要獲取第一個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"}

這裡有幾個選項:

  1. grep與標誌一起使用以-o僅列印行的匹配部分並過濾以head僅獲取第一個匹配項:
grep -o '"accountHeader[^}]*}' file.json | head -n1 

正則表達式查找 a "accountHeaderthen 盡可能多的非}字元,直到第一個}。它與下面其他解決方案中使用的正則表達式基本相同。 2. 使用sedwith-n來禁止列印,並p在替換成功後才列印。然後,替換(刪除)除您想要的之外的所有內容:

sed -n  's/.*\("accountHeader[^}]*}\).*/\1/p' file.json 
  1. 使用 Perl,為每個呼叫-l添加一個換行符,這意味著“處理輸入文件的每一行”並應用由給出的腳本:print``-n``-e
perl -lne  '/.*("accountHeader[^}]*})/ && print $1' file.json 
  1. 使用awk,這假設**您的範例輸入中的 用於突出顯示您感興趣的部分並且實際上並不存在於真實數據中。如果是這樣,這應該工作:
awk -F'},' '{print $2"}"}' file.json

如果**確實存在,事情就更簡單了,只需將它們用作欄位分隔符:

awk -F'**' '{print $2"}"}' file.json

或者

perl -F"\*\*" -alne 'print $F[1]' file.json

引用自:https://unix.stackexchange.com/questions/114574