формат массива карате javaScript - PullRequest
0 голосов
/ 11 февраля 2019

Вот мой javascript, который готовит json, который я буду использовать для сопоставления ответа API

var squArray = []
for (j = loopincri; j < (loopincri + skuCount); j++) {
    var skuJson = {
        "skuCode": skuCodes[j],
        "quantity": quantity
    }
    squArray.push(skuJson)
}

, когда я печатаю, это выглядит так:

{
  "0": {
    "sku_code": "50",
    "quantityNO": 2,
    "min": 550,
    "max": 13000,
    "dtePrice": {
      "0": {
        "date": "2019-04-11",
        "listPrice": 6600,
        "salePrice": 3870
      },
      "1": {
        "date": "2019-04-12",
        "listPrice": 6600,
        "salePrice": 3870
      }
    }
  }
}

Но я хочурезультат будет как

[
  {
    "sku_code": "50",
    "quantityNO": 2,
    "min": 550,
    "max": 13000,
    "dtePrice": [
      {
        "date": "2019-04-11",
        "listPrice": 6600,
        "salePrice": 3870
      },
      {
        "date": "2019-04-12",
        "listPrice": 6600,
        "salePrice": 3870
      }
    ]
  }
]

Можете ли вы помочь мне с этим?Как ответ API в формате я хочу

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Да, существует проблема с массивами, если вы делаете слишком много в JS: https://stackoverflow.com/a/54256766/143475 - поэтому, если вы делаете karate.read() для создания фрагментов JSON, он должен начать работать.

Я рекомендую избегать использования JS, насколько это возможно, попробуйте использовать нативы каратэ для циклов и трансформации и т. Д. Например:

* def skuCodes = ['a', 'b', 'c', 'd', 'e']
* def nums = []
* eval for(var i = 0; i < 5; i++) nums.add(~~i)
* def fun = function(x){ return { skuCode: skuCodes[x], array: read('array.json') } }
* def json = karate.map(nums, fun)

Да, использование read() - небольшое неудобство, но учтите, что вы можетеиспользовать встроенные выражения в файле JSON.Это будет исправлено в будущей версии каратэ.

0 голосов
/ 11 февраля 2019

Это может быть обходной путь для преодоления этой ошибки jdk, обсуждаемой в https://stackoverflow.com/a/54256766/8615449

Вместо прямого возврата вашего объекта, попробуйте,

return Java.type("com.intuit.karate.JsonUtils").toJson(squArray)

Я знаю, это возвращение JSON в строковом форматеВы можете использовать его в своей функции следующим образом:

* json myJson = JsFunction()

здесь JsFunction() - это созданная вами функция, которая возвращает значение json.

0 голосов
/ 11 февраля 2019

Не знаю о каратэ JS.Но если каратэ JS конвертирует ваш массив в объект, вы можете преобразовать его в массив.Как вы можете видеть, результирующий объект подобен массиву, который можно легко преобразовать в массив с помощью метода «Array.from (queryObject)».Модификация: -

var squArray = []
for(j=loopincri ; j<(loopincri+skuCount); j++){
        var skuJson = {"skuCode":skuCodes[j],
                       "quantity":quantity};
        squArray.push(skuJson);
    }
let squArray = Array.from(squArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...