Android开发之JSON使用

Android开发之JSON使用

今天在论坛看到有不少朋友问关于json的问题,所以想写一篇关于android中使用json的博客。

首先

json是什么
JSON的全称是JavaScript Object Notation,从这里可以看到它源于JavaScript,它采用文本形式体现。比如
{"name":"zhangsan","age":20,"wife":"如花"}
这个简单表示了一个对象,在java中,类是这样的
public class Person{
    String name;
    int age;
    String wife;
    getter...
    setter...
}
json的组成

 1. 采用键值对方式组成基本元素,其中key是属性,value是对应的属性值
 2. {}用来保存对象
 3. []用来保存数组
 4. 用,分割元素
 5. json中数据类型没有严格的划分,所以在使用的过程中注意这点
所以,常见的json文本中存在对象({})和数组([]),只要掌握了长些基本要素,学会了如何将json文本准确的转化成class,那么json对你来说你就掌握了。

对于新手而言,常常会对json的内容理解不到位,或者没有对json文本进行校验就去解析。这里提供一款在线的json校验工具:bejson


Android json解析库

这里,我只推荐fastjson这个库。这个库是alibaba开源的,原本用于javaee中,后来进过简化,对于android支持也很好。

源码地址:https://github.com/alibaba/fastjson

在branches中可以看到不同版本的for android的源码,一般使用最新稳定版本即可。

下面,如何使用fastjson,核心类com.alibaba.fastjson.JSON

1. 将对象转化为json字符串

JSON.toJSONString(Object obj);

2 .将json字符串转化为对象

 JSON.parse();
 JSON.parseObject(String text, Class<T> clazz);
 等还有很多方法,下面我具体说一下通过泛型转化指定的类对象。

json示例

{
    "name": "中国",
    "province": [{
        "name": "黑龙江",
        "cities": {
            "city": ["哈尔滨", "大庆"]
        }
    }, {
        "name": "广东",
        "cities": {
            "city": ["广州", "深圳", "珠海"]
        }
    }, {
        "name": "台湾",
        "cities": {
            "city": ["台北", "高雄"]
        }
    }, {
        "name": "新疆",
        "cities": {
            "city": ["乌鲁木齐"]
        }
    }]
}
对于以上的json传,我们可以看到最外层是一个对象,这个对象包含两个键值对,name和province。其中name是属性值为String型,province是一个对象数组,那么对应的java类如下

public class Citys{
    String name;
    List<Province> province;
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }
    public void setProvince(List<Province> province){
        this.province = province;
    }
    public List<Province> getProvince(){
        return province;
    }
    //这是一个内部类,必须要用static class,负责内部类无法通过反射
    public static class Province{
        String name;
        List<String> cities;
        public void setName(String name){
            this.name = name;
        }
        public String getName(){
            return name;
        }
        public void setCities(List<String> cities){
            this.cities = cities;
        }
        public List<String> getCities(){
            return cities;
        }
    }
}

上面是通过一个类搞定,内部类使用的时候需要static class修饰。
当然也可以拆分为两个类,我这里就不说了。
所有属性必须要有getter和setter。

使用是不是很简单呢。

一般我拿到json传的处理方式是,通过json格式化之后,就可以迅速写出json对应的class。
格式化工具推荐:chrome浏览器插件fehelper,还有就是上面所说的bejson

最后

json使用的地方越来越多,对于常用的json数据转化也是最基本的要求。
这个只要根据上面所提到的,认真分解json数据格式,没有任何难点。
如果对于json有任何问题的,欢迎咨询。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 10:52:24

Android开发之JSON使用的相关文章

android开发之JSON数据解析

android开发之JSON数据解析 本博文主要讲述的是使用google的lib库gson解析JSON数据的方法,因为android自带的JSON数据解析器对只可以在android 3.0以上版本才能适用,如果需要使用gson,我们需要在项目中添加gson的lib库文件,然后add path.详细代码如下: MainActivyty.java: package com.example.analysisjson; import android.os.Bundle; import android.a

Android开发之json解析

目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上面废话了.现在开发app肯定会涉及到与服务器的交互的,目前的首选是json.用到的解析json的包可以选择gson,fastjson等. 现在分析下把我难倒了好几天的一个bug,就是json的解析. 用到的API:http://fanyi.youdao.com/openapi.do?keyfrom=

Android开发之JSON数据发送与获取

刚在工作中遇到 415类型的错误: 分析原因后得知:1,数据设置错误: 2,没有这句 httpPost.setHeader("Content-Type", "application/json"); 1 private void testFunction(){ 2 try { 3 4 HttpClient httpClient = new DefaultHttpClient(); 5 String url = "http://203.191.101.122:

Android开发之Tween(补间动画)完全解析(下)

欢迎转载,转载请注明出处:http://blog.csdn.net/dmk877/article/details/51980734 在上一篇文章中,我们详细讨论了Tween动画的xml的实现以及interpolator的使用,相信通过上篇文章大家对Tween动画的xml属性的配置会有一个详细的理解,当然这篇文章也是承接上篇文章,所以强烈建议先阅读上篇文章:Android开发之Tween(补间动画)完全解析(上),这篇文章将从代码的角度实现上篇文章的效果.如有疑问请留言,如有谬误欢迎批评指正. T

Android开发之bindService()侦听service内部状态

在Android开发之bindService()通信的基础上,实现bindService()方法侦听service内部状态. 实现侦听service内部状态,使用的是回调机制 1.首先实现一个接口 1 public static interface CallBack{ 2 void onDataChange(String data); 3 } 2. 1 private CallBack callBack=null; 2 public void setCallBack(CallBack callB

Android开发之Fragment详解

Android开发之Fragment学习 1.简介: Fragment是Android 3.0引入的新API. Fragment代表了 Activity的子模块,因此可以把Fragment理解成Activity片段.Fragment用于自己的生命周期,也可以接受它自己的输入事件. Fragment必须被"嵌入" Activity中使用,因此虽然Fragment也拥有自己的生命周期,但Fragment的生命周期会受它所在的Activity的生命周期的控制.例如,当Activity暂停时,

Android开发之SpannableString详解

在实际的应用开发过程中经常会遇到,在文本的不同部分显示一些不同的字体风格的信息如:文本的字体.大小.颜色.样式.以及超级链接等.一般情况下,TextView中的文本都是一个样式,对于类似的情况,可以借助SpannableString或SpannableStringBuilder对象来实现以上设置. SpannableString与SpannableStringBuilder都可以将某段文本设置成一个Span,在Android中,Span表示一段文本的效果,例如,链接形式.图像.带背景的文本等.只

Android开发之Html类详解

在进行Android开发中经常回忽略Html类.这个类其实很简单,就是将HTML标签文本解析成普通的样式文本.下面就让我么看一下这个类的具体介绍. 类结构: java.lang.Object    ? android.text.Html 类概述: 这个类用于处理的HTML字符串并将其转换成可显示的样式文本.但并不是所有的HTML标记的支持. 公有方法: 说其简单是应为它就有四个方法: Public Methods static String escapeHtml(CharSequence tex

Android开发之View重写相关API-onLayout,onMeasure,MeasureSpec

 1.onLayout android.view.ViewGroup protected void onLayout(boolean changed, int l, int t, int r, int b) 执行layout操作时调用onLayout方法.View要给它的每个Child设定size和position.拥有Children的子类需要重写onLayout方法并且调用每个Child的layout方法. 参数changed表示view的size或position发生变化.参数l, t,