You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析JSON字符串并将用户数据展示到APP的TextView中

嘿,我来帮你搞定这个把JSON解析后的用户数据展示到TextView的需求!针对你给出的这段JSON,我给你两种常用的实现方式,你可以根据自己的情况选:

方法一:使用Android原生JSON API(无需第三方库)

如果不想引入额外的库,用系统自带的JSONArray和JSONObject就可以搞定,步骤很清晰:

  • 先把你的JSON字符串解析成JSONArray(因为最外层是数组格式)
  • 从数组里取出第一个用户对象(你的示例里只有一个用户)
  • 逐个提取字段,包括嵌套的address和company里的内容
  • 把这些内容拼接成易读的格式,最后设置到TextView里

直接上代码,带注释很容易看懂:

// 假设你已经拿到了目标JSON字符串,存在jsonStr变量里
String jsonStr = "[{ \"id\": 1, \"name\": \"Leanne Graham\", \"username\": \"Bret\", \"email\": \"Sincere@april.biz\", \"address\": { \"street\": \"Kulas Light\", \"suite\": \"Apt. 556\", \"city\": \"Gwenborough\", \"zipcode\": \"92998-3874\", \"geo\": { \"lat\": \"-37.3159\", \"lng\": \"81.1496\" } }, \"phone\": \"1-770-736-8031 x56442\", \"website\": \"hildegard.org\", \"company\": { \"name\": \"Romaguera-Crona\", \"catchPhrase\": \"...\" } }]";
TextView userInfoTv = findViewById(R.id.user_info_text_view);

try {
    // 解析成JSON数组
    JSONArray jsonArray = new JSONArray(jsonStr);
    // 取出数组中的第一个用户对象
    JSONObject userObj = jsonArray.getJSONObject(0);
    
    // 提取基础用户字段
    int id = userObj.getInt("id");
    String name = userObj.getString("name");
    String username = userObj.getString("username");
    String email = userObj.getString("email");
    String phone = userObj.getString("phone");
    String website = userObj.getString("website");
    
    // 解析嵌套的地址对象
    JSONObject addressObj = userObj.getJSONObject("address");
    String street = addressObj.getString("street");
    String suite = addressObj.getString("suite");
    String city = addressObj.getString("city");
    String zipcode = addressObj.getString("zipcode");
    // 解析地址里的坐标信息
    JSONObject geoObj = addressObj.getJSONObject("geo");
    String lat = geoObj.getString("lat");
    String lng = geoObj.getString("lng");
    
    // 解析嵌套的公司对象
    JSONObject companyObj = userObj.getJSONObject("company");
    String companyName = companyObj.getString("name");
    String catchPhrase = companyObj.getString("catchPhrase");
    
    // 拼接成用户信息文本
    StringBuilder infoBuilder = new StringBuilder();
    infoBuilder.append("用户ID: ").append(id).append("\n")
               .append("姓名: ").append(name).append("\n")
               .append("用户名: ").append(username).append("\n")
               .append("邮箱: ").append(email).append("\n")
               .append("地址: ").append(street).append(" ").append(suite).append(", ").append(city).append(" ").append(zipcode).append("\n")
               .append("坐标: ").append(lat).append(", ").append(lng).append("\n")
               .append("电话: ").append(phone).append("\n")
               .append("网站: ").append(website).append("\n")
               .append("公司: ").append(companyName).append("\n")
               .append("公司标语: ").append(catchPhrase);
    
    // 将拼接好的文本设置到TextView
    userInfoTv.setText(infoBuilder.toString());
} catch (JSONException e) {
    // 处理解析异常,比如JSON格式错误、字段缺失等情况
    e.printStackTrace();
    userInfoTv.setText("解析用户数据失败");
}
方法二:使用Gson库(更简洁,适合复杂JSON结构)

如果你的JSON结构以后可能更复杂,或者想写更简洁的代码,Google的Gson库是个好选择,步骤如下:

第一步:添加Gson依赖

在你的app模块的build.gradle文件的dependencies块里添加:

implementation 'com.google.code.gson:gson:2.10.1' // 可以用最新版本

第二步:创建对应的数据实体类

根据JSON结构创建四个实体类,字段名要和JSON里的完全对应(或者用@SerializedName注解映射不同的字段名):

// 用户实体类
public class User {
    private int id;
    private String name;
    private String username;
    private String email;
    private Address address;
    private String phone;
    private String website;
    private Company company;

    // 生成所有字段的getter和setter方法,这里省略部分示例
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public Address getAddress() { return address; }
    public void setAddress(Address address) { this.address = address; }
    public Company getCompany() { return company; }
    public void setCompany(Company company) { this.company = company; }
}

// 地址实体类
public class Address {
    private String street;
    private String suite;
    private String city;
    private String zipcode;
    private Geo geo;

    public String getStreet() { return street; }
    public void setStreet(String street) { this.street = street; }
    public Geo getGeo() { return geo; }
    public void setGeo(Geo geo) { this.geo = geo; }
    // 其他字段的getter/setter自行补充
}

// 坐标实体类
public class Geo {
    private String lat;
    private String lng;

    public String getLat() { return lat; }
    public void setLat(String lat) { this.lat = lat; }
    public String getLng() { return lng; }
    public void setLng(String lng) { this.lng = lng; }
}

// 公司实体类
public class Company {
    private String name;
    private String catchPhrase;

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getCatchPhrase() { return catchPhrase; }
    public void setCatchPhrase(String catchPhrase) { this.catchPhrase = catchPhrase; }
}

第三步:解析JSON并展示

用Gson把JSON字符串直接转成实体类对象,然后提取数据展示:

String jsonStr = "[{ \"id\": 1, \"name\": \"Leanne Graham\", \"username\": \"Bret\", \"email\": \"Sincere@april.biz\", \"address\": { \"street\": \"Kulas Light\", \"suite\": \"Apt. 556\", \"city\": \"Gwenborough\", \"zipcode\": \"92998-3874\", \"geo\": { \"lat\": \"-37.3159\", \"lng\": \"81.1496\" } }, \"phone\": \"1-770-736-8031 x56442\", \"website\": \"hildegard.org\", \"company\": { \"name\": \"Romaguera-Crona\", \"catchPhrase\": \"...\" } }]";
TextView userInfoTv = findViewById(R.id.user_info_text_view);

try {
    Gson gson = new Gson();
    // 因为JSON是数组,所以解析成User数组
    User[] users = gson.fromJson(jsonStr, User[].class);
    // 取第一个用户
    User user = users[0];
    
    // 拼接用户信息文本
    StringBuilder infoBuilder = new StringBuilder();
    infoBuilder.append("用户ID: ").append(user.getId()).append("\n")
               .append("姓名: ").append(user.getName()).append("\n")
               .append("用户名: ").append(user.getUsername()).append("\n")
               .append("邮箱: ").append(user.getEmail()).append("\n")
               .append("地址: ").append(user.getAddress().getStreet()).append(" ").append(user.getAddress().getSuite())
               .append(", ").append(user.getAddress().getCity()).append(" ").append(user.getAddress().getZipcode()).append("\n")
               .append("坐标: ").append(user.getAddress().getGeo().getLat()).append(", ").append(user.getAddress().getGeo().getLng()).append("\n")
               .append("电话: ").append(user.getPhone()).append("\n")
               .append("网站: ").append(user.getWebsite()).append("\n")
               .append("公司: ").append(user.getCompany().getName()).append("\n")
               .append("公司标语: ").append(user.getCompany().getCatchPhrase());
    
    userInfoTv.setText(infoBuilder.toString());
} catch (Exception e) {
    e.printStackTrace();
    userInfoTv.setText("解析用户数据失败");
}

一些小提示

  • 不管用哪种方法,一定要加异常处理,避免因为JSON格式错误、字段缺失导致APP崩溃
  • 如果你的JSON数组里可能有多个用户,记得用循环遍历数组,不要直接取第一个元素
  • 用Gson时,如果实体类字段名和JSON字段名不一样,可以用@SerializedName("json字段名")注解来映射,比如@SerializedName("catch_phrase") private String catchPhrase;

内容的提问来源于stack exchange,提问作者gwarrior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:16:58