Java处理请求接口后返回的json数据 - 直接处理json字符串

2 篇文章 0 订阅

Java处理请求接口后返回的json数据 - 直接处理json字符串

友情提示:
此方法利用的是阿里的fastjson,请注意使用前引用
不想直接对字符串进行操作,请前往本文文末连接跳转至利用对象处理;

项目场景

我们熟知前端会大量的处理请求回来的JSON数据。
但是也无可避免的,后端也会直接发送请求给接口,进而出现Java会直接处理josn数据的情况。


处理思路

  1. 将返回的数据接收到一个string对象中(有时候需要自己选择性的取舍接收)
  2. 再将string转换为JSONObject对象
  3. 用get()方法获取对应的值
    注:基于第三点的特殊情况,如果返回的json里面出现多组数据的情况(如下图/可能有更复杂的层次),则需要转换为数组(用JSONObject.parseArray()转换)再进行操作—可无限套娃。

在这里插入图片描述


参考代码

package com.az;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class JsonStr {
    public static void main(String[] args) {
        //1.比如从前端接收的是这个样子的json字符串,但是我们是不能直接获取到经度 纬度所对应的值的,所以必须要对这个字符串进行解析,
        String str = "{\"code\":\"0\"," +
                            "\"error\":null," +
                            "\"msg\":\"success\"," +
                            "\"detail\":[\n" +
                             "    {\"phoneNum\":\"013012401091\",\n" +
                             "    \"lat\":34.431864,\n" +
                             "    \"lon\":109.25992,\n" +
                             "    \"height\":360,\n" +
                             "    \"speed\":33,\n" +
                             "    \"direction\":10,\n" +
                             "    \"gpsTime\":1615420800000,\n" +
                             "    \"gpsDateTime\":1615420800000,\n" +
                             "    \"mileage\":253830800,\n" +
                             "    \"alarms\":[24],\n" +
                             "    \"status\":[1,2,21],\n" +
                             "    \"property\":{}\n" +
                             "    }" +
                            " ]" +
                         " }";
        //先转换成JSONObject类型
        JSONObject jsonObj = JSON.parseObject(str);
        //通过JSONObject中的getString("key")方法,得到对应的值  {"code":"0","error":null,"msg":"success"}这种类型
        System.out.println("code:"+jsonObj.getString("code"));
        
        //2.字符串中含有数组的,比如像detail中的数据
        JSONArray jsonInfo = JSONObject.parseArray(jsonObj.getString("detail"));//将jsonObj解析成json数组
        for (int i = 0; i < jsonInfo.size(); i++) {//遍历detail信息
            JSONObject jsonDetailInfo = jsonInfo.getJSONObject(i);//根据下标以此拿数据,每一个数据又是一个JSONObject对象,所以用JSONObject接收
            String lat = jsonDetailInfo.getString("lat");
            String lon = jsonDetailInfo.getString("lon");
            String gpsDateTime = jsonDetailInfo.getString("gpsDateTime");
            //然后进行其他处理
            System.out.println("lat:"+lat+";lon:"+lon+";gpsDateTime:"+gpsDateTime);
        }
    }
}

若是,使用频率比较多,推荐使用对象的形式处理
利用对象处理传送门.

  • 8
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设你要向服务器发送一个包含多层数据结构的JSON格式的字符串请求体,可以按照以下步骤操作: 1. 构造Java对象,该对象包含多层嵌套的数据结构。例如,可以使用Map和List来表示JSON对象或数组。 ```java Map<String, Object> jsonMap = new HashMap<>(); jsonMap.put("name", "John"); jsonMap.put("age", 30); List<String> hobbies = new ArrayList<>(); hobbies.add("reading"); hobbies.add("running"); jsonMap.put("hobbies", hobbies); Map<String, Object> address = new HashMap<>(); address.put("street", "123 Main St"); address.put("city", "Anytown"); address.put("state", "CA"); jsonMap.put("address", address); ``` 2. 将Java对象转换为JSON格式的字符串。可以使用Java中的Jackson库或者Google的Gson库等第三方库来实现。 ```java ObjectMapper objectMapper = new ObjectMapper(); String jsonStr = objectMapper.writeValueAsString(jsonMap); ``` 3. 发送HTTP请求,将JSON格式的字符串请求体放入请求中。 ```java URL url = new URL("http://example.com/api"); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); con.setDoOutput(true); OutputStream outputStream = con.getOutputStream(); outputStream.write(jsonStr.getBytes("UTF-8")); outputStream.flush(); outputStream.close(); int responseCode = con.getResponseCode(); ``` 以上代码示例中,我们构造了一个包含多层嵌套数据结构的Java对象,并将其转换为JSON格式的字符串。然后,我们将该JSON字符串作为请求体发送到服务器,并获取响应码。注意在发送请求时需要设置Content-Type为application/json;charset=UTF-8,以指定请求体的格式为JSON
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值