2015-04-30 3 views
1

У меня есть результат API, который я хотел очистить. Я пытался с grep показывать только имя под технологиями, но пока не могу понять, как это сделать.Разбор файлов JSON в bash?

Любые идеи? (Вот небольшой фрагмент гигантского файла JSON)

{ 
    "Results": [ 
    { 
     "Lookup": null, 
     "Result": { 
     "Paths": [ 
      { 
      "Domain": "builtwith.com", 
      "Url": "", 
      "SubDomain": "", 
      "Technologies": [ 
       { 
       "Categories": null, 
       "Name": "Amazon CloudFront", 
       "Tag": "cdns", 
       "FirstDetected": 1386284400000, 
       "LastDetected": 1411599600000 
       }, 
       { 
       "Categories": null, 
       "Name": "ASP.NET 4.0", 
       "Tag": "framework", 
       "FirstDetected": 1385679600000, 
       "LastDetected": 1430265600000 
       }, 
       { 
       "Categories": null, 
       "Name": "Comodo PositiveSSL", 
       "Tag": "ssl", 
       "FirstDetected": 1372806000000, 
       "LastDetected": 1430265600000 
       } 
      ] 

Я не застрял на Grep .. но похоже Grep будет лучшая идея. При необходимости я открыт для других.

+0

Кстати, лично я склонен согласиться с ответом здесь (JQ) над настоящий момент самым высоким голосовавшие ответ на вопрос это дублирует (jsawk). jq * * указывается в качестве ответа на этот вопрос. –

ответ

2

Если вы разбираете JSON в bash, I настаивают, что вы используете jq.

JQ, как СЭД данных JSON - вы можете использовать его, чтобы нарезать и фильтровать карту и преобразовывать структурированные данные с той же легкостью, что SED, AWK, Grep и друзья позволяют играть с текстом.

Проверьте, что он может сделать:

$ jq -r '.Results[].Result.Paths[].Technologies[].Name' results.json 
Amazon CloudFront 
ASP.NET 4.0 
Comodo PositiveSSL 

$ cat results.json 
{ 
"Results": [ 
    { 
     "Lookup": null, 
     "Result": { 
     "Paths": [ 
      { 
      "Domain": "builtwith.com", 
      "Url": "", 
      "SubDomain": "", 
      "Technologies": [ 
       { 
       "Categories": null, 
       "Name": "Amazon CloudFront", 
       "Tag": "cdns", 
       "FirstDetected": 1386284400000, 
       "LastDetected": 1411599600000 
       }, 
       { 
       "Categories": null, 
       "Name": "ASP.NET 4.0", 
       "Tag": "framework", 
       "FirstDetected": 1385679600000, 
       "LastDetected": 1430265600000 
       }, 
       { 
       "Categories": null, 
       "Name": "Comodo PositiveSSL", 
       "Tag": "ssl", 
       "FirstDetected": 1372806000000, 
       "LastDetected": 1430265600000 
       } 
      ] 
      } 
     ] 
     } 
    } 
    ] 
} 
+0

WOW! Это супер круто! Я искал это уже неделю! – user3610137

+0

@ user3610137, это очень сложно помочь с «разрешением отказано» без дополнительной информации. Это может быть что угодно: не иметь + x в каталоге, в котором он находится, чтобы попытаться запустить его из домашнего каталога, установленного 'noexec', в политики SELinux, запрещающего выполнение двоичных файлов, которые не помечены как установленные системными пакетами ... хорошо, кто знает, как многие другие вещи, которые могут быть? –

+0

Я понял. Извини за это. Удивительный инструмент! Еще раз спасибо, Джон Кугельман! – user3610137