当前位置:   article > 正文

对接口返回 json 的基本处理_第三方接口json数据 怎么处理

第三方接口json数据 怎么处理

目录

前言:

项目背景

主要代码注释


前言:

在现代 Web 应用程序中,API 通常以 JSON 格式返回数据。因此,对接口返回的 JSON 数据进行基本处理非常重要。

项目背景

1.涉及到旧接口为 xml 格式,新接口为 json 格式。
2.涉及到新接口有旧接口字段的合并;
3.我只做了简单的对比,如比对两个接口的返回字段是否值相等;
4.项目使用 java 语言,Maven 管理。

主要代码注释

  1. //使用日志
  2. @Slf4j
  3. public class TestUrlMap {
  4. //设置请求http参数初始化
  5. public static final OkHttpClient client = new OkHttpClient.Builder()
  6. .connectTimeout(5, TimeUnit.SECONDS)
  7. .readTimeout(5, TimeUnit.SECONDS)
  8. .writeTimeout(5, TimeUnit.SECONDS)
  9. .build();
  10. public static void diffMap(String code) throws IOException {
  11. //如果是读取多条url,可以读取文件,我这里直接赋值了。
  12. String oldUrl = "oldUrl";
  13. String newUrl = "newUrl" ;
  14. //获取body
  15. String oldData = client.newCall(
  16. new Request.Builder().url(oldUrl).build())
  17. .execute().body().string();
  18. String newData = client.newCall(
  19. new Request.Builder().url(newUrl).build())
  20. .execute().body().string();
  21. if (StringUtils.isAnyBlank(oldData, newData)) {
  22. log.error("获取数据异常, code={}, oldData={}, newData={}", code, oldData, newData);
  23. }
  24. //读取到json里面result的内容
  25. JSONObject oldJson = JSON.parseObject(oldData).getJSONObject("result");
  26. //XML转换json,并读取里面result内容
  27. JSONObject newJson = XML.toJSONObject(newData).getJSONObject("result");
  28. /**
  29. *数据示例
  30. * "adcode": "110000",
  31. "version": 1601,
  32. */
  33. //对比字符串
  34. if (!StringUtils.equals(oldJson.getString("adcode"), newJson.getString("adcode"))) {
  35. log.error("code={}, adcode 不一致, {}!={}", code, oldJson.getString("adcode"), newJson.getString("adcode"));
  36. return;
  37. }
  38. //对比整数
  39. if (oldJson.getInt("version") != newJson.getInt("version")) {
  40. log.error("code={}, version 不一致, {}!={}", code, oldJson.getInt("version"), newJson.getInt("version"));
  41. return;
  42. }
  43. int count = newJson.getInteger("count");
  44. JSONArray oldEvents = oldJson.getJSONArray("events");
  45. JSONArray newEvents = newJson.getJSONArray("events");
  46. if (count != oldEvents.size() || count != newEvents.size()) {
  47. log.error("code={} events长度不一致, {}!={}", code, oldEvents.size(), newEvents.size());
  48. return;
  49. }
  50. //下面的for循环是对比json里面的数组
  51. int newI = 0;
  52. int linkIndex = 0;
  53. for (int i = 0; i < oldEvents.size(); i++) {
  54. String oldEvent = StringUtils.trim(oldEvents.getString(i));
  55. //获取json数组里面第N个值。
  56. JSONObject newEvent = newEvents.getJSONObject(newI);
  57. List<String> oldEventList = Splitter.on(",").splitToList(oldEvent);
  58. //oldEventList.get(29),查找接口文档确定 i 的值,但是要注意java的下标是从0开始计数。
  59. if (!StringUtils.equals(Strings.nullToEmpty(newEvent.getString("lonlat")), Strings.nullToEmpty(oldEventList.get(29) + "," + oldEventList.get(30)))) {
  60. log.error("code={}, enventIndex={}, lonlat 不一致, {}!={}", code, i, oldEventList.get(29) + "," + oldEventList.get(30), newEvent.getString("lonlat"));
  61. return;
  62. }
  63. }
  64. //这里做的比较是因为新接口把旧接口的很多相关的niLinkIds字段拼接为一个字段了。
  65. String niLinkIdsStr = newEvent.getString("niLinkIds");
  66. Iterable<String> split = Splitter.on(",").split(niLinkIdsStr);
  67. if (!Iterables.get(split, linkIndex, "").equals(Strings.nullToEmpty(oldEventList.get(26)))) {
  68. log.error("code={}, enventIndex={}, niLinkIds 不一致, {}!={}", code, i, oldEventList.get(26), newEvent.getString("niLinkIds"));
  69. return;
  70. }
  71. linkIndex++;
  72. if (linkIndex >= Iterables.size(split)) {
  73. linkIndex = 0;
  74. newI++;
  75. }
  76. log.info("对比成功");
  77. }
  78. }
  79. public static void main(String[] args) throws IOException {
  80. /* List<String> codes = Files.readLines(new File("F:/code.txt"), Charset.forName("utf-8"));
  81. * for (String code : codes) {
  82. * diffMap(code);
  83. * }
  84. * 这是读取文件,传参数的方式,因为我直接给url赋值了,所以直接调用 diffMap() 就可以了。
  85. */
  86. diffMap(code);
  87. }
  88. }

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

 【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N6B9http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=qxJZAmfxpSO2iG5DiXEmovrrbqX9lf9Y&authKey=LtqIFckKO2IOCAiI9MaslOjsWuQVoVKRPzUSJH%2F5I9YFBuKr75dUnznAqyCpJ0t6&noverify=0&group_code=574737577

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/158032
推荐阅读
相关标签
  

闽ICP备14008679号