【问题标题】:Best way to generate JSON dynamically [duplicate]动态生成 JSON 的最佳方法 [重复]
【发布时间】:2020-07-17 05:06:04
【问题描述】:

我正在测试 REST API。每个 API 使用不同类型的 JSON 有效负载。 我不想手动填写所有输入。因此,我想动态生成 JSON(例如,从文本文件中读取值并填写 JSON 结构),然后将生成的 JSON 作为请求正文传递给 API。

最好的方法是什么? 有什么工具或插件推荐吗?

附:嵌套中的 JSON 结构非常复杂。

【问题讨论】:

  • 这能回答你的问题吗? How to convert hashmap to JSON object in Java
  • "从文本文件中读取值并填写 JSON 结构" 将文本文件格式设为 JSON,然后不加修改地发送内容。
  • 您使用的是什么 REST API?大多数 Java REST API 会自动将 Map<String, Object> 转换为 JSON 对象,反之亦然。对于 JSON 数组,List<Object>Object[] 也是如此。

标签: java json rest api


【解决方案1】:

这和我几周前的情况一样。

我所做的,可能对你也有帮助:

我用private Map<String, Object> data;

在我想要动态 JSON 的 DTO 中。

如果我的 JSON 是:

{
"key":{
"key1":["1","2","3"]
},
"key2":{
}
}

然后这个 JSON 将被保存为一个 Map,您可以使用它来解析您的 JSON 数据。

对于解析尝试使用org.json

例如:

JSONObject jsonObject = new JSONObject(mapFromDTO);

现在您可以完全访问 JSON,这是您的核心问题。

【讨论】:

  • @saurav-dudeja 如果它适合您,请接受答案,以便未来的编码人员可以直接参考此解决方案。
【解决方案2】:

答案在于定义合同。首先确定 JSON 中的最大可能值。

例如,首先您可以决定以下联系人:

{
    "id": 1,
    "name": "Username",
    "age": 30,
    "phone": 900000000
}

一旦合同敲定,设计一个 POJO。这个 POJO 可以是非常复杂的数据结构,可以有字段,也可以是字段(对象)的列表。这完全取决于您的业务。

然后你可以编写一个java服务,它可以根据一些复杂的业务逻辑生成这个POJO。

一旦这个 POJO 被填充,使用像 jackson 这样的 3rd 方库将其转换为 JSON。

进一步阅读: https://www.tutorialspoint.com/how-to-convert-java-object-to-json-using-jackson-library

【讨论】:

  • 这不是正确的做法,因为如果将来有任何新密钥到达,我们的代码将跳过该密钥。
  • 但是,如果我们不知道我们正在测试哪些键:值,它就不是正确的测试用例。我觉得合同应该始终是最新的,否则测试将永远无法完全确定。对于有问题的用例,如果在解析文件和填充 POJO 时他仍然有键,它应该简单地失败 JSON 结构已更改的测试。经典的 TDD 方法。
  • 我接受你的观点,但在某些用例中,我们不必验证整个数据,它只需是有效的 JSON。就像在 Mongo 中插入数据时一样,我们可以拥有可以具有任何键的动态数据,它必须是有效的 JSON。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
相关资源
最近更新 更多