Как получить данные из файла JSON с помощью пакетного скрипта и записать данные в текстовый файл? - PullRequest
0 голосов
/ 24 ноября 2018

Я хотел бы получить данные из файла * .json в file.txt с помощью пакета.

Мой файл JSON config.json:

  "nodes": [
        {
          "id": "item1",
          "host": "${host:item1}",
          "apps": [
            {
              "id": "value1",
              "template_id": "value1"
            },
            {
              "id": "value2",
              "template_id": "value2",
            },

Я хочу получить толькозначения value1 и value2 из id элементов узла apps.Но проблема использования команды find в моем скрипте на самом деле заключается в том, что она читает значения id и template_id.

Возможно ли получить значение id, а не template_id?

Я попробовал это ... все еще не работает ...

setlocal EnableDelayedExpansion
set c=0
for /f "tokens=2 delims=:, " %%a in (' find "id" ^< "config.json" ') do (
    set /a c+=1
    set val[!c!]=%%~a
)
for /L %%b in (1,1,!c!) do echo !val[%%b]!

И после этого я действительно не знаю, как получить все эти данные в моем текстовом файле.

Ответы [ 3 ]

0 голосов
/ 24 ноября 2018

Вы можете попробовать с jsonextractor.bat.Чтобы иметь действительный json, я использовал это:

{
    "nodes": [{
        "id": "item1",
        "host": "${host:item1}",
        "apps": [{
                "id": "value1",
                "template_id": "value1"
            },
            {
                "id": "value2",
                "template_id": "value2"
            }
        ]
    }]
}

и получил значения:

for /f "tokens=* delims=" %%a in ('jsonextractor.bat test.json "nodes[0].apps[0].id"') do (
 set "first_id=%%~a"
)
echo %first_id%
0 голосов
/ 07 января 2019

Используйте синтаксический анализатор JSON, например, Xidel , для анализа JSON!

xidel -s config.json -e "$json/(.//apps)()/id"   # or in full: $json/(nodes)()/(apps)()/id
value1
value2

Чтобы сохранить вывод в файл:

xidel -s config.json -e "$json/(.//apps)()/id" > output.txt
0 голосов
/ 24 ноября 2018

Вы не должны воспринимать структурированную информацию как простой текст.

Если я возьму, например, Valid JSON (RFC 4627) версию вашего фрагмента:

{
    "nodes":[
    {
      "id":"item1",
      "host":"${host:item1}",
      "apps":[
         {
            "id":"value1",
            "template_id":"value1"
         },
         {
            "id":"value2",
            "template_id":"value2"
         }
      ]
    }]
}

И используйте командлет PowerShell ConvertFrom-Jsonдовольно просто получить правильные значения идентификатора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...