将数组中包含的字符串值转换为数字

时间:2020-05-20 03:51:55

标签: json jq

使用以下输入示例:

[
  {
    "orgid": "1",
    "email": "janedoe@aol.com",
    "first_name": "Jane",
    "last_name": "Doe",
    "phone": "4045551212",
    "tags": [
      "tag1",
      "tag2"
    ],
    "fields": [
      {
        "id": "2",
        "value": "IB4220"
      },
      {
        "id": "3",
        "value": "1994-05-18"
      },
      {
        "id": "12",
        "value": "CONSULTANT"
      },
      {
        "id": "13",
        "value": "janedoe@aol.com"
      },
      {
        "id": "6",
        "value": "111 Main Blvd"
      },
      {
        "id": "7",
        "value": "Babylon"
      },
      {
        "id": "8",
        "value": "NY"
      },
      {
        "id": "9",
        "value": "11702-1522"
      },
      {
        "id": "10",
        "value": "US"
      },
      {
        "id": "11",
        "value": ""
      },
      {
        "id": "5",
        "value": "http://www.something.com/janedoe"
      }
    ]
  }
]

我正在尝试使用jq的“ tonumber”功能将“ id”字段转换为数字。

这是我正在使用的jq过滤器,无济于事...

.[] | {contacts:[.[] | {orgid: .["orgid"],email: .["email"],first_name: .["first_name"],last_name: .["last_name"],phone: .["phone"],tags: .["tags"],fields: [{id: .fields[].id|tonumber, value: .fields[].value}]}]}

它将字段转换为数字;但会产生以下不良结果(记录重复多次)。

{
  "contacts": [
    {
      "orgid": "1",
      "email": "janedoe@aol.com",
      "first_name": "Jane",
      "last_name": "Doe",
      "phone": "4045551212",
      "tags": [
        "tag1",
        "tag2"
      ],
      "fields": [
        {
          "id": 2,
          "value": "IB4220"
        },
        {
          "id": 2,
          "value": "1994-05-18"
        },
        {
          "id": 2,
          "value": "CONSULTANT"
        },
        {
          "id": 2,
          "value": "janedoe@aol.com"
        },
        {
          "id": 2,
          "value": "111 Main Blvd"
        },
        {
          "id": 2,
          "value": "Babylon"
        },
        {
          "id": 2,
          "value": "NY"
        },
        {
          "id": 2,
          "value": "11702-1522"
        },
        {
          "id": 2,
          "value": "US"
        },
        {
          "id": 2,
          "value": ""
        },
        {
          "id": 2,
          "value": "http://www.something.com/janedoe"
        },
        {
          "id": 3,
          "value": "IB4220"
        },
        {
          "id": 3,
          "value": "1994-05-18"
        },
        {
          "id": 3,
          "value": "CONSULTANT"
        },
        {
          "id": 3,
          "value": "janedoe@aol.com"
        },
        {
          "id": 3,
          "value": "111 Main Blvd"
        },
        {
          "id": 3,
          "value": "Babylon"
        },
        {
          "id": 3,
          "value": "NY"
        },
        {
          "id": 3,
          "value": "11702-1522"
        },
        {
          "id": 3,
          "value": "US"
        },
        {
          "id": 3,
          "value": ""
        },
        {
          "id": 3,
          "value": "http://www.something.com/janedoe"
        },
        {
          "id": 12,
          "value": "IB4220"
        },
        {
          "id": 12,
          "value": "1994-05-18"
        },
        {
          "id": 12,
          "value": "CONSULTANT"
        },
        {
          "id": 12,
          "value": "janedoe@aol.com"
        },
        {
          "id": 12,
          "value": "111 Main Blvd"
        },
        {
          "id": 12,
          "value": "Babylon"
        },
        {
          "id": 12,
          "value": "NY"
        },
        {
          "id": 12,
          "value": "11702-1522"
        },
        {
          "id": 12,
          "value": "US"
        },
        {
          "id": 12,
          "value": ""
        },
        {
          "id": 12,
          "value": "http://www.something.com/janedoe"
        },
        {
          "id": 13,
          "value": "IB4220"
        },
        {
          "id": 13,
          "value": "1994-05-18"
        },
        {
          "id": 13,
          "value": "CONSULTANT"
        },
        {
          "id": 13,
          "value": "janedoe@aol.com"
        },
        {
          "id": 13,
          "value": "111 Main Blvd"
        },
        {
          "id": 13,
          "value": "Babylon"
        },
        {
          "id": 13,
          "value": "NY"
        },
        {
          "id": 13,
          "value": "11702-1522"
        },
        {
          "id": 13,
          "value": "US"
        },
        {
          "id": 13,
          "value": ""
        },
        {
          "id": 13,
          "value": "http://www.something.com/janedoe"
        },
        {
          "id": 6,
          "value": "IB4220"
        },
        {
          "id": 6,
          "value": "1994-05-18"
        },
        {
          "id": 6,
          "value": "CONSULTANT"
        },
        {
          "id": 6,
          "value": "janedoe@aol.com"
        },
        {
          "id": 6,
          "value": "111 Main Blvd"
        },
        {
          "id": 6,
          "value": "Babylon"
        },
        {
          "id": 6,
          "value": "NY"
        },
        {
          "id": 6,
          "value": "11702-1522"
        },
        {
          "id": 6,
          "value": "US"
        },
        {
          "id": 6,
          "value": ""
        },
        {
          "id": 6,
          "value": "http://www.something.com/janedoe"
        },
        {
          "id": 7,
          "value": "IB4220"
        },
        {
          "id": 7,
          "value": "1994-05-18"
        },
        {
          "id": 7,
          "value": "CONSULTANT"
        },
        {
          "id": 7,
          "value": "janedoe@aol.com"
        },
        {
          "id": 7,
          "value": "111 Main Blvd"
        },
        {
          "id": 7,
          "value": "Babylon"
        },
        {
          "id": 7,
          "value": "NY"
        },
        {
          "id": 7,
          "value": "11702-1522"
        },
        {
          "id": 7,
          "value": "US"
        },
        {
          "id": 7,
          "value": ""
        },
        {
          "id": 7,
          "value": "http://www.something.com/janedoe"
        },
        {
          "id": 8,
          "value": "IB4220"
        },
        {
          "id": 8,
          "value": "1994-05-18"
        },
        {
          "id": 8,
          "value": "CONSULTANT"
        },
        {
          "id": 8,
          "value": "janedoe@aol.com"
        },
        {
          "id": 8,
          "value": "111 Main Blvd"
        },
        {
          "id": 8,
          "value": "Babylon"
        },
        {
          "id": 8,
          "value": "NY"
        },
        {
          "id": 8,
          "value": "11702-1522"
        },
        {
          "id": 8,
          "value": "US"
        },
        {
          "id": 8,
          "value": ""
        },
        {
          "id": 8,
          "value": "http://www.something.com/janedoe"
        },
        {
          "id": 9,
          "value": "IB4220"
        },
        {
          "id": 9,
          "value": "1994-05-18"
        },
        {
          "id": 9,
          "value": "CONSULTANT"
        },
        {
          "id": 9,
          "value": "janedoe@aol.com"
        },
        {
          "id": 9,
          "value": "111 Main Blvd"
        },
        {
          "id": 9,
          "value": "Babylon"
        },
        {
          "id": 9,
          "value": "NY"
        },
        {
          "id": 9,
          "value": "11702-1522"
        },
        {
          "id": 9,
          "value": "US"
        },
        {
          "id": 9,
          "value": ""
        },
        {
          "id": 9,
          "value": "http://www.something.com/janedoe"
        },
        {
          "id": 10,
          "value": "IB4220"
        },
        {
          "id": 10,
          "value": "1994-05-18"
        },
        {
          "id": 10,
          "value": "CONSULTANT"
        },
        {
          "id": 10,
          "value": "janedoe@aol.com"
        },
        {
          "id": 10,
          "value": "111 Main Blvd"
        },
        {
          "id": 10,
          "value": "Babylon"
        },
        {
          "id": 10,
          "value": "NY"
        },
        {
          "id": 10,
          "value": "11702-1522"
        },
        {
          "id": 10,
          "value": "US"
        },
        {
          "id": 10,
          "value": ""
        },
        {
          "id": 10,
          "value": "http://www.something.com/janedoe"
        },
        {
          "id": 11,
          "value": "IB4220"
        },
        {
          "id": 11,
          "value": "1994-05-18"
        },
        {
          "id": 11,
          "value": "CONSULTANT"
        },
        {
          "id": 11,
          "value": "janedoe@aol.com"
        },
        {
          "id": 11,
          "value": "111 Main Blvd"
        },
        {
          "id": 11,
          "value": "Babylon"
        },
        {
          "id": 11,
          "value": "NY"
        },
        {
          "id": 11,
          "value": "11702-1522"
        },
        {
          "id": 11,
          "value": "US"
        },
        {
          "id": 11,
          "value": ""
        },
        {
          "id": 11,
          "value": "http://www.something.com/janedoe"
        },
        {
          "id": 5,
          "value": "IB4220"
        },
        {
          "id": 5,
          "value": "1994-05-18"
        },
        {
          "id": 5,
          "value": "CONSULTANT"
        },
        {
          "id": 5,
          "value": "janedoe@aol.com"
        },
        {
          "id": 5,
          "value": "111 Main Blvd"
        },
        {
          "id": 5,
          "value": "Babylon"
        },
        {
          "id": 5,
          "value": "NY"
        },
        {
          "id": 5,
          "value": "11702-1522"
        },
        {
          "id": 5,
          "value": "US"
        },
        {
          "id": 5,
          "value": ""
        },
        {
          "id": 5,
          "value": "http://www.something.com/janedoe"
        }
      ]
    }
  ]
}

所需结果:

[
  {
    "orgid": "1",
    "email": "janedoe@aol.com",
    "first_name": "Jane",
    "last_name": "Doe",
    "phone": "4045551212",
    "tags": [
      "tag1",
      "tag2"
    ],
    "fields": [
      {
        "id": 2,
        "value": "IB4220"
      },
      {
        "id": 3,
        "value": "1994-05-18"
      },
      {
        "id": 12,
        "value": "CONSULTANT"
      },
      {
        "id": 13,
        "value": "janedoe@aol.com"
      },
      {
        "id": 6,
        "value": "111 Main Blvd"
      },
      {
        "id": 7,
        "value": "Babylon"
      },
      {
        "id": 8,
        "value": "NY"
      },
      {
        "id": 9,
        "value": "11702-1522"
      },
      {
        "id": 10,
        "value": "US"
      },
      {
        "id": 11,
        "value": ""
      },
      {
        "id": 5,
        "value": "http://www.something.com/janedoe"
      }
    ]
  }
]

1 个答案:

答案 0 :(得分:3)

这将产生您的预期输出:

.[].fields[].id |= tonumber

|=采用路径.[].fields[].id扩展到tonumber并将其应用到其值。

demo at jqplay.org