Как получить JSON STRING из данной строки

У меня строка, приведенная ниже. Мне просто нужно получить первую строчку 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"} 

One Solution collect form web for “Как получить JSON STRING из данной строки”

Вот несколько вариантов:

  1. Используйте grep с флагом -o для печати только соответствующей части линии и фильтра с head чтобы получить только первое совпадение:

     grep -o '"accountHeader[^}]*}' file.json | head -n1 

    Регулярное выражение ищет "accountHeader то как можно больше "accountHeader до первого символа } . Это в основном одно и то же регулярное выражение, используемое в других нижеприведенных решениях.

  2. Используйте sed с -n для подавления печати и p после замены для печати, только если замена была успешной. Затем замените (удалите) все, кроме того, что вы хотите:

     sed -n 's/.*\("accountHeader[^}]*}\).*/\1/p' file.json 
  3. Используйте Perl, -l добавляет новую строку для каждого вызова print , -n означает «обрабатывает каждую строку входного файла» и применяет сценарий, заданный -e :

     perl -lne '/.*("accountHeader[^}]*})/ && print $1' file.json 
  4. Используйте awk , это предполагает, что ** в вашем примере ввода есть, чтобы выделить интересующую вас часть и фактически не существует в реальных данных. Если это так, это должно работать:

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

Если ** на самом деле там, вещи еще проще, просто используйте их как полевые разделители:

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

или

 perl -F"\*\*" -alne 'print $F[1]' file.json 
  • Почему «while .. read .. << EOL» выполняет расширение переменной, но <файл и | не?
  • Команды Bash внутри vi
  • что означает $ * в shell
  • cp, запущенный из результатов кода, не может stat '/ tmp / somedir' работает в оболочке
  • Как копировать и переименовывать файлы, найденные в функции «найти» Linux?
  • ImageMagick для нескольких файлов
  • mv файл / папка с пробелами в имени не работает - LFTP
  • Как убить беглого кота?
  • Цикл forach для вывода ls
  • Переменные за пределами цикла while
  • Есть ли способ перечислить количество файлов при использовании dpkg -L для отображения файлов пакета?
  • Linux и Unix - лучшая ОС в мире.