JSON 解析小例子


首先,准备好 res/raw 下面的 user.json文件 

(可以是数组,也可以是单个对象,复杂的话就是彼此嵌套)

<span style="font-size:18px;"><strong>[
  {
    "firstName": "DAI",
    "lastName": "BOBO",
    "email": "bobo@moliying.com"
  },
  {
    "firstName": "XIN",
    "lastName": "JIANJIAN",
    "email": "jianjian@moliying.com"
  }
]</strong></span>

接着,  创建好 对象 User

<span style="font-size:14px;">public class User {
    private String firstName;
    private String lastName;
    private String email;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    @Override
    public String toString() {
        return "User{" +
                "firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                '}';
    }

    public void setEmail(String email) {
        this.email = email;
    }
}</span>

然后,Activity 中 开始解析

<span style="font-size:14px;">public class JSONActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_json);
    }

    public void jsonSimpleClick(View view){
        ArrayList<User> list = parseJSON();
        System.out.println(list);
    }

    private ArrayList<User> parseJSON() {
        InputStream in = getResources().openRawResource(R.raw.user);
        JsonReader jsonReader = new JsonReader(new InputStreamReader(in));
        ArrayList<User> list = new ArrayList<>();    // 准备好 接收对象的 容器
        try {
            jsonReader.beginArray();     //因为是数组,所以 先beginArray()。如果是对象,就先beginObject()。
            while (jsonReader.hasNext()){
                User user = getUser(jsonReader);       //抽出来到下面称为一个内部方法 ,以免 层级太深 影响代码可读性
                list.add(user);    //上一行获得 对象 , 添加到list中
            }
            jsonReader.endArray();       //类似 作用域的 括号  要和 beginArray/beginObject 成对出现
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }

    @NonNull
    private User getUser(JsonReader jsonReader) throws IOException {
        jsonReader.beginObject();       //开始 数组中 单个 对象的 解析      下面要有endObject()  成对呼应出现
        User user = new User();
        while(jsonReader.hasNext()){
            String name = jsonReader.nextName();      //得到 “名称/值”对  中的  “名称”
            if("firstName".equals(name)){       // 根据 “名称”,  对应 取“值”
                user.setFirstName(jsonReader.nextString());     // 得到 “值”,给 对象 的 成员变量 赋值
            }else if("lastName".equals(name)){
                user.setLastName(jsonReader.nextString());
            }else if("email".equals(name)){
                user.setEmail(jsonReader.nextString());
            }
        }
        jsonReader.endObject();      //结束解析对象
        return user;         // 赋值 & 解析 完成     得到完整对象 并 返回
    }
}
</span>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值