其他分享
首页 > 其他分享> > Json数据交互

Json数据交互

作者:互联网

Json数据格式

JSON(JavaScript Object Notation,js对象标记),是一种轻量级的数据交换格式。
对象格式:
对象的属性也可以是对象,数组

  {
    “key”:"value",
    "name":"zhangsan",
    "age":30,
    "company":{
      "city":"南京",
      "Company_name":"xxxxxxx",
      "position":"manager"
    },
    "friends":["lisi","wangwu","zhaoliu"]
  }

对象数组:

   [{"name":"zhangsan","age":30},
    {"name":"lisi","age":42},
    {"name":"wangwu","age":57}]

Json数据传递:

@RequestMapping:指定请求的URL
@RequestBody:在方法的形参中,将请求体中的数据绑定到形参上
@RespsonseBody:作用在方法上,将方法的返回结果直接写进HTTP Response Body里。一般情况下,@ResponseBody都会在异步获取数据时使用,被标注的方法返回的数据都将输出到响应流中。

遇到的错误
Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]
错误代码:
Android客户端:

String u_name = username.getText().toString();
String u_pwd = password.getText().toString();
User user = new User(u_name, u_pwd);
Gson gson = new Gson();
String json = gson.toJson(user);
RequestBody requestBody = new FormBody.Builder()
                            .add("user", json)
                            .build();

服务端:

public UserData register(@RequestBody User user){
        …… ……
    }

客户端是把json对象放进了方法体中,理论上可以改成(@RequestParam Json user)(还没经过试验是否可行),改成(@RequestParam User user)是不可行的,这时候会报错无法转换。
正确代码如下,使用OKHTTP

String u_name = username.getText().toString();
                    String u_pwd = password.getText().toString();
                    User user = new User(u_name, u_pwd);
                    Gson gson = new Gson();
                    String json = gson.toJson(user);
                    RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"),json);

Json数据转换(使用Gson)

对象转换成json数据

User user = new User(u_name, u_pwd);
Gson gson = new Gson();
String json = gson.toJson(user);

json数据转换成对象

private User parseJsonWithGson(String jsonData){
        Gson gson=new Gson();
        User user=gson.fromJson(jsonData,User.class);
        return user;
    }

List集合转换成json数据

Gson gson=new Gson();
String gs=gson.toJson(list);

json数据转换成List集合

private List<User> parseJsonWithGson(String jsonData){
        Gson gson=new Gson();
        List<User> users=gson.fromJson(jsonData,new TypeToken<ArrayList<User>>(){}.getType());
//        Log.d("users",users.toString());
        return users;
    }

map集合转换成json数据

Gson gson=new Gson();
String gs=gson.toJson(map);

json数据转换成map集合

private Map<String,Object> parseJsonWithGson(String jsonData){
        Gson gson=new Gson();
        Map<String,Object> m=gson.fromJson(jsonData,new TypeToken<HashMap<String,Object>>(){}.getType());
        return m;
    }

标签:String,交互,json,gson,Json,user,new,数据,Gson
来源: https://www.cnblogs.com/onee123/p/15941397.html