如何使用批处理脚本从JSON文件中获取数据并将数据写入文本文件?

时间:2018-11-24 17:43:38

标签: json batch-file

我想将* .json文件中的数据批量添加到file.txt中。

我的JSON文件config.json

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

我只想获取节点value1的{​​{1}}个元素的值value2id。但是在我的脚本中使用命令apps的问题实际上是它读取findid的值。

是否可以将值获取到template_id而不是id

我尝试过...仍然无法正常工作...

template_id

然后,我真的不知道如何在文本文件中获取所有这些数据。

3 个答案:

答案 0 :(得分:0)

您不应将结构化信息视为纯文本。

例如,以我的片段的Valid JSON (RFC 4627)版为例:

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

并使用PowerShell的cmdlet ConvertFrom-Json,很容易收到正确的ID值

PoSh> $Json = Get-Content .\config.json | ConvertFrom-Json
PoSh> $JSon.Nodes.Apps.id
value1
value2

使用批处理文件标签将其成批包裹起来成为主题

@Echo off
Powershell -Nop -C "(Get-Content .\config.json|ConvertFrom-Json).Nodes.Apps.id" >file.txt

答案 1 :(得分:0)

您可以尝试使用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%

答案 2 :(得分:0)

请使用像Xidel这样的JSON解析器来解析JSON!

CompanyContact

要将输出保存到文件中:

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