JQ: добавить позицию в массиве json к элементу - PullRequest
0 голосов
/ 09 октября 2018

Я фактически получаю json через API, который содержит несколько массивов с различной информацией.Два из массивов косвенно связаны.Массив 1 содержит элемент, который ссылается на позицию массива элемента в массиве 2. Я фактически преобразовываю этот json в соответствии с запрошенными требованиями и перемещаю его в базу данных.Необходимо связать информацию обоих массивов позже в базе данных.Поэтому моя идея состоит в том, чтобы добавить элемент с позицией массива в массив 2.

Пример:

оригинал Массив один:

{
  "country": [
    {
      "ContinentCode": "EU",
      "ContinentGroup": 1,
      "CountryCode": "DE",
      "CountryName": "Germany",
      "CurrencyIndex": 1
    },
    {
      "ContinentCode": "AM",
      "ContinentGroup": 2,
      "CountryCode": "CA",
      "CountryName": "Canada",
      "CurrencyIndex": 2
    }
  ]
}

Массив оригинал два:

{
  "currency": [
    {
      "CODE": "EUR",
      "Name": "Euro"
    },
    {
      "Code": "CAD",
      "Name": "Canadian Dollar"
    }
  ]
}

Идея нового массива два:

{
  "currency": [
    {
      "CODE": "EUR",
      "Name": "Euro",
      "Position": 1
    },
    {
      "Code": "CAD",
      "Name": "Canadian Dollar",
      "Position": 2
    }
  ]
}

Я использую jq 1.5 в среде Windows.Я посмотрел в руководстве, но не нашел встроенную функцию для добавления позиции массива в элемент.Есть идеи?

С уважением, Тимо

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Чтобы добавить индекс массива к элементам массива в arr2.json, вы можете использовать reduce:

jq -f program.jq arr2.json

, где program.jq содержит:

.currency |= reduce range(0;length) as $i (.; .[$i].Position = 1+$i)

Или,при условии, что вы находитесь в среде Windows:

jq ".currency |= reduce range(0;length) as $i (.; .[$i].Position = 1+$i)" arr2.json
0 голосов
/ 09 октября 2018

Это пример кода вашего требования, пожалуйста, запустите фрагмент кода и проверьте ваше требование

var json1 ="{\"country\": [ { \"ContinentCode\": \"EU\", \"ContinentGroup\": 1, \"CountryCode\": \"DE\", \"CountryName\": \"Germany\", \"CurrencyIndex\" : 1}, { \"ContinentCode\": \"AM\", \"ContinentGroup\": 2, \"CountryCode\": \"CA\", \"CountryName\": \"Canada\", \"CurrencyIndex\" : 2}]}";
var json2 = "{\"currency\": [ { \"Code\": \"EUR\", \"Name\": \"Euro\" }, { \"Code\": \"CAD\", \"Name\": \"Canadian Dollar\" }]}";
        
var jsonParsed1 = JSON.parse(json1);
var jsonParsed2 = JSON.parse(json2);

var json3 = [];
for(var i=0;i<jsonParsed1.country.length;i++){
  var json3Object = {"Code":jsonParsed2.currency[i].Code,"Name":jsonParsed2.currency[i].Name,"Position":i+1};
  json3.push(json3Object);
}
console.log(json3);
Скажите, поможет ли это вам
...