【问题标题】:How to change big json dynamicly in Karate framework?如何在空手道框架中动态更改大 json?
【发布时间】:2019-04-03 17:38:48
【问题描述】:

我有下一个 JSON

{
  "updated": [
    {
      "id": "1",
      "email": "api.test@test.io",
      "businessUnit": "US",
      "firstName": "John",
      "lastName": "Doe",
      "age": 21,
      "gender": "male"
    },
    {
      "id": "2",
      "email": "api.test@test.io",
      "businessUnit": "US",
      "firstName": "John",
      "lastName": "Doe",
      "age": 22,
      "gender": "male"
    },
    {
      "id": "3",
      "email": "api.test@test.io",
      "businessUnit": "US",
      "firstName": "John",
      "lastName": "Doe",
      "age": 23,
      "gender": "male"
    }
  ],
  "deleted": [
    {
      "id": "4",
      "email": "api.test@test.io",
      "businessUnit": "US",
      "firstName": "John",
      "lastName": "Doe",
      "age": 31,
      "gender": "male"
    },
    {
      "id": "5",
      "email": "api.test@test.io",
      "businessUnit": "US",
      "firstName": "John",
      "lastName": "Doe",
      "age": 32,
      "gender": "male"
    },
    {
      "id": "6",
      "email": "api.test@test.io",
      "businessUnit": "US",
      "firstName": "John",
      "lastName": "Doe",
      "age": 33,
      "gender": "male"
    }
  ]
}
  1. 是否可以通过其他方式更改“id”文件,而不是:

    • 设置 req.updated[0].id = userId
    • 设置 req.updated[1].id = userId
    • 设置 req.updated[2].id = userId
  2. 是否可以更改“已更新”和“已删除”两个部分中的所有“id”文件,例如:

    • 设置 req[*].id = userId

【问题讨论】:

    标签: json dsl karate


    【解决方案1】:

    已编辑:好的,所以您想使用批量编辑,并有一些逻辑来同时增加 id-s。所以使用转换:https://github.com/intuit/karate#json-transforms

    请注意,karate.map(x, i) 带有一个可选的第二个参数,该参数为您提供循环索引。

    * def data = [{}, {}, {}]
    * def fun = function(x, i){ x.id = ~~(i + 1); return x }
    * def payload = karate.map(data, fun)
    * match payload == [{id: 1}, {id: 2}, {id: 3}]
    

    【讨论】:

    • 这不是我想要的。我会添加更多的细节,希望它会有所帮助。这是完整的测试场景,文件 Leads.json 是前面列出的:gist.github.com/kasheylm/d0862c9c7110b1cd25f4eb13b5fdb163 我有两个数组,每个数组有 3 个元素,我想为 6 个元素中的每一个设置 uniq ID。我需要一套散装。我尝试了转换功能,但没有成功。我想知道您是否可以帮我一个忙,并为我的场景展示正确的示例。提前谢谢你。
    • @Denis - 好的,我编辑了我的答案,我认为它回答了你的问题。
    • 非常感谢,它现在对我有用,看起来像这样 code * def userId = getId() * def req = read('classpath:data/leads.json') * def fun =函数(x, i){ x.id = getId(); return x } * def updated = karate.map(req.updated, fun) * def deleted = karate.map(req.deleted, fun) * print req code 还有一件事 - 我有 2 个 karate.map 操作每个数组。我尝试使用统一的东西,例如 * def fun = function(x, i){ $x..id = getId(); return x } * def res = karate.map(req, fun) 但在 $x..id 上失败。可能你知道一些更多的技巧吗?))
    • @Denis 请打开一个新问题
    猜你喜欢
    • 2019-03-19
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多