androidjson解析及简单例子(转载).
JSON详解以及在android中的使用

讲解:李志敏
9/7/2013
概念
• JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999. JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language. 官网/
9/7/2013
在Android中使用json
JSONArray
9/7/2013
在Android中使用json
JSONArray解析丼例
在服务器上有一个js文件http://192.168.1.101/Web/news.js文件内容如下: [{ title : "国家发改委:台湾降油价和大陆没可比性", description : "国家发改委副主仸朱之鑫", image : "http://192.168.1.101/Web/img/a.jpg", comment : 163 },{ title : "国家发改委:台湾降油价和大陆没可比性", description : "国家发改委副主仸朱之鑫", image : "http://192.168.1.101/Web/img/b.jpg", comment : 0 }, { title : "国家发改委:台湾降油价和大陆没可比性", description : "国家发改委副主仸朱之鑫", image : "http://192.168.1.101/Web/img/c.jpg", comment : 0 } ]; 9/7/2013
Android中gson、jsonobject解析JSON的方法详解

Android中gson、jsonobject解析JSON的⽅法详解JSON的定义:⼀种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。
业内主流技术为其提供了完整的解决⽅案(有点类似于正则表达式,获得了当今⼤部分语⾔的⽀持),从⽽可以在不同平台间进⾏数据交换。
JSON采⽤兼容性很⾼的⽂本格式,同时也具备类似于C语⾔体系的⾏为。
JSON对象:JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每⼀个item都是⼀个key-value对, 表现为"key:value"的形式, key-value对之间使⽤逗号分隔. 如:{"name":"coolxing", "age"=24, "male":true, "address":{"street":"huiLongGuan", "city":"beijing", "country":"china"}}. JSON对象的key只能是string类型的, ⽽value可以是string, number, false, true, null, Object对象甚⾄是array数组, 也就是说可以存在嵌套的情况.JSON数组:JSON数组(array)以"["开始, 以"]"结束, 数组中的每⼀个元素可以是string, number, false, true, null, Object对象甚⾄是array数组,数组间的元素使⽤逗号分隔. 如["coolxing", 24, {"street":"huiLongGuan", "city":"beijing", "country":"china"}].1.前⾔JSON数据是android⽹络开发中常见的数据格式。
json解析例子

下面这个是自己修改别人的小例子,主要是加一些注释和讲解,这个例子主要是使用android进行json解析。
1 单数据{'singer':{'id':01,'name':'tom','gender':'男'}}2 多个数据{"singers":[3 {'id':02,'name':'tom','gender':'男'},4 {'id':03,'name':'jerry,'gender':'男'},5 {'id':04,'name':'jim,'gender':'男'},6 {'id':05,'name':'lily,'gender':'女'}]}下面的类主要是解析单个数据parseJson()和多个数据的方法parseJsonMulti():查看源码打印?01 public class JsonActivity extends Activity {02 /** Called when the activity is first created. */03 private TextView tvJson;04 private Button btnJson;05 private Button btnJsonMulti;06 @Override07 public void onCreate(Bundle savedInstanceState) {08 super.onCreate(savedInstanceState);09 setContentView(yout.main);10 tvJson = (TextView) this.findViewById(Json);11 btnJson = (Button) this.findViewById(R.id.btnJson);12 btnJsonMulti = (Button) this.findViewById(R.id.btnJsonMulti);13 btnJson.setOnClickListener(new View.OnClickListener() {14 @Override15 public void onClick(View v) {16 // url17 // String strUrl = "http://10.158.166.110:8080/AndroidServer/JsonServlet";18 String strUrl = ServerPageUtil.getStrUrl(UrlsOfServer.JSON_SINGER);19 //获得返回的Json字符串20 String strResult = connServerForResult(strUrl);21 //解析Json字符串22 parseJson(strResult);23 }24 });25 btnJsonMulti.setOnClickListener(new View.OnClickListener() {26 @Override27 public void onClick(View v) {28 String strUrl = ServerPageUtil.getStrUrl(UrlsOfServer.JSON_SINGERS);29 String strResult = connServerForResult(strUrl);30 //获得多个Singer31 parseJsonMulti(strResult);32 }33 });34 }35 private String connServerForResult(String strUrl) {36 // HttpGet对象37 HttpGet httpRequest = new HttpGet(strUrl);38 String strResult = "";39 try {40 // HttpClient对象41 HttpClient httpClient = new DefaultHttpClient();42 // 获得HttpResponse对象43 HttpResponse httpResponse = httpClient.execute(httpRequest);44 if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {45 // 取得返回的数据46 strResult = EntityUtils.toString(httpResponse.getEntity());47 }48 } catch (ClientProtocolException e) {49 tvJson.setText("protocol error");50 e.printStackTrace();51 } catch (IOException e) {52 tvJson.setText("IO error");53 e.printStackTrace();54 }55 return strResult;56 }57 // 普通Json数据解析58 private void parseJson(String strResult) {59 try {60 JSONObject jsonObj = new JSONObject(strResult).getJSONObject("singer");61 int id = jsonObj.getInt("id");62 String name = jsonObj.getString("name");63 String gender = jsonObj.getString("gender");64 tvJson.setText("ID号"+id + ", 姓名:" + name + ",性别:" + gender);65 } catch (JSONException e) {66 System.out.println("Json parse error");67 e.printStackTrace();68 }69 }70 //解析多个数据的Json71 private void parseJsonMulti(String strResult) {72 try {73 JSONArray jsonObjs = new JSONObject(strResult).getJSONArray("singers");74 String s = "";75 for(int i = 0; i < jsonObjs.length() ; i++){76 JSONObject jsonObj = ((JSONObject)jsonObjs.opt(i))77 .getJSONObject("singer");78 int id = jsonObj.getInt("id");79 String name = jsonObj.getString("name");80 String gender = jsonObj.getString("gender");81 s += "ID号"+id + ", 姓名:" + name + ",性别:" + gender+ "\n" ;82 }83 tvJson.setText(s);84 } catch (JSONException e) {85 System.out.println("Jsons parse error !");86 e.printStackTrace();87 }88 }89 }。
Android解析json数据示例代码(三种方式)

Android解析json数据⽰例代码(三种⽅式)Json数据复制代码代码如下: [{"code":"110000","sheng":"11","di":"00","xian":"00","name":"北京市","level":1}, {"code":"659004","sheng":"65","di":"90","xian":"04","name":"五家渠市","level":3}, {"code":"710000","sheng":"71","di":"00","xian":"00","name":"台湾省","level":1}, {"code":"810000","sheng":"81","di":"00","xian":"00","name":"⾹港特别⾏政区","level":1}, {"code":"820000","sheng":"82","di":"00","xian":"00","name":"澳门特别⾏政区","level":1}]三种解析⽅式android⾃带解析,Gson解析,FastJson解析1、android⾃带解析json_btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String s = getString();Log.d("txt",s);List<City> list = new ArrayList<City>();try {JSONArray obj = new JSONArray(s);for(int i=0;i<obj.length();i++){JSONObject jsonobj = (JSONObject)obj.get(i);City city = new City();city.setCode(jsonobj.getString("code"));city.setSheng(jsonobj.optString("sheng"));city.setDi(jsonobj.optString("di"));city.setXian(jsonobj.optString("xian"));city.setName(jsonobj.optString("name"));city.setLevel(jsonobj.optInt("level"));Log.d("txt",city.toString());textView.append(city.toString());}} catch (JSONException e) {e.printStackTrace();}}});先获取JSON数组,在解析JsonObject。
Android 中的JSON 数据处理

Android 中的JSON 数据处理Android 中的 JSON 数据处理在 Android 开发中,我们经常需要与服务器进行数据交互,而大多数情况下服务器返回的数据格式都是使用 JSON(JavaScript Object Notation)来表示。
因此,了解和掌握如何在 Android 中处理 JSON 数据是非常重要的。
本文将介绍 Android 中的 JSON 数据处理,包括解析 JSON 数据、构建 JSON 数据、以及处理 JSON 中的数组和对象等。
1. 解析 JSON 数据在 Android 中,可以使用 JSONObject 和 JSONArray 来解析 JSON 数据。
JSONObject 是一个键值对的集合,而 JSONArray 是一个有序的值的集合。
以下是一个解析 JSON 数据的示例代码:```javatry {String jsonString = "{ \"name\":\"John\", \"age\":30, \"city\":\"New York\" }";JSONObject jsonObject = new JSONObject(jsonString);String name = jsonObject.getString("name");int age = jsonObject.getInt("age");String city = jsonObject.getString("city");Log.d("JSON", "Name: " + name);Log.d("JSON", "Age: " + age);Log.d("JSON", "City: " + city);} catch (JSONException e) {e.printStackTrace();}```2. 构建 JSON 数据在 Android 中,可以使用 JSONObject 和 JSONArray 来构建 JSON 数据。
AndroidJSON数据解析(数据传输)

AndroidJSON数据解析(数据传输)上篇随笔详细介绍了三种解析服务器端传过来的xml数据格式,⽽对于服务器端来说,返回给客户端的数据格式⼀般分为html、xml和json这三种格式,那么本篇随笔将讲解⼀下json这个知识点,包括如何通过json-lib和gson这两个json解析库来对解析我们的json数据,以及如何在我们的Android客户端解析来⾃服务器端的json数据,并更新到UI当中。
⼀、什么是jsonjson(Javascript Object Notation)是⼀种轻量级的数据交换格式,相⽐于xml这种数据交换格式来说,因为解析xml⽐较的复杂,⽽且需要编写⼤段的代码,所以客户端和服务器的数据交换格式往往通过json来进⾏交换。
尤其是对于web开发来说,json数据格式在客户端直接可以通过javascript来进⾏解析。
json⼀共有两种数据结构,⼀种是以 (key/value)对形式存在的⽆序的jsonObject对象,⼀个对象以“{”(左花括号)开始,“}”(右花括号)结束。
每个“名称”后跟⼀个“:”(冒号);“‘名称/值’ 对”之间使⽤“,”(逗号)分隔。
例如:{"name": "xiaoluo"},这就是⼀个最简单的json对象,对于这种数据格式,key值必须要是string类型,⽽对于value,则可以是string、number、object、array等数据类型:另⼀种数据格式就是有序的value的集合,这种形式被称为是jsonArray,数组是值(value)的有序集合。
⼀个数组以“[”(左中括号)开始,“]”(右中括号)结束。
值之间使⽤“,”(逗号)分隔。
⼆、解析json数据格式这⾥将使⽤两种json的解析库来对我们的json数据格式进⾏解析以及⽣成我们的json数据格式。
使⽤json-lib来进⾏解析,我们需要引⼊第三⽅的包,因为json-lib分为了两个版本,⼀个版本是针对于jdk1.3的,⼀个版本是针对于jdk1.5的,这⾥我们下载jdk1.5的这个json-lib包,其中还需要引⼊其他的⼏个jar包:下载好这⼏个jar包后,加⼊到classpath中即可。
android解析网络数据(JSON)

android解析⽹络数据(JSON)解析json数据,获取你需要的信息⾸先在manifest中添加允许访问⽹络的权限信息<uses-permission android:name="android.permission.INTERNET"/>Mainpackage com.chuanxidemo.shaoxin.demo08;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import .HttpURLConnection;import .MalformedURLException;import .URL;/*** Created by shaoxin on 2017/2/25.*/public class Main extends AppCompatActivity {private TextView txt;private Button btn2;private BufferedReader bufferedReader;private StringBuffer stringBuffer;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);stringBuffer = new StringBuffer();txt = (TextView) findViewById(R.id.txt);btn2 = (Button) findViewById(R.id.btn2);btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new Thread(){@Overridepublic void run() {//使⽤线程的⽬的是防⽌该过程在主线程中运⾏super.run();getData();parseJsonData(getData());}}.start();//解析}});}private void parseJsonData (String string){//try\{jsonp9+?\((.+?)\)\}catch\(e\)\{\}try {//解析的过程就是在逐层剥开代码的过程JSONObject jsonObject = new JSONObject(string);//每⼀层都是⼀个Object对象Log.v("msg",jsonObject.get("try").toString());Log.i("msg", "parseJsonData: "+jsonObject.getString("timestamp"));jsonObject.getJSONObject("data");JSONArray jsonArray = jsonObject.getJSONArray("tvQipuId");//对象中的数组Log.i("msg", "parseJsonData: "+jsonArray.get(0).toString());} catch (JSONException e) {e.printStackTrace();}}private String getData() {try {URL url = new URL("/jp/avlist/202861101/1/?callback=jsonp9");//json地址 HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");//使⽤get⽅法接收InputStream inputStream = connection.getInputStream();//得到⼀个输⼊流bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTf-8"));String sread = null;while ((sread = bufferedReader.readLine()) != null) {stringBuffer.append(sread);stringBuffer.append("\r\n");}// Log.i("msg", "onClick: " + stringBuffer.toString());} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return stringBuffer.toString();}}main.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/txt"android:layout_width="wrap_content"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/btn2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="获取数据"/></LinearLayout>。
Android利用Gson解析嵌套多层的Json的简单方法

Android利⽤Gson解析嵌套多层的Json的简单⽅法⾸先先讲⼀个⽐较简单点的例⼦(最简单的我就不讲啦,⽹上很多),帮助新⼿理解Gson的使⽤⽅法:⽐如我们要解析⼀个下⾯这种的Json:String json = {"a":"100","b":[{"b1":"b_value1","b2":"b_value2"},{"b1":"b_value1","b2":"b_value2"}],"c":{"c1":"c_value1","c2":"c_value2"}}⾸先我们需要定义⼀个序列化的Bean,这⾥采⽤内部类的形式,看起来会⽐较清晰⼀些:public class JsonBean {public String a;public List<B> b;public C c;public static class B {public String b1;public String b2;}public static class C {public String c1;public String c2;}}很多时候⼤家都是不知道这个Bean是该怎么定义,这⾥⾯需要注意⼏点:1、内部嵌套的类必须是static的,要不然解析会出错;2、类⾥⾯的属性名必须跟Json字段⾥⾯的Key是⼀模⼀样的;3、内部嵌套的⽤[]括起来的部分是⼀个List,所以定义为 public List<B> b,⽽只⽤{}嵌套的就定义为 public C c,具体的⼤家对照Json字符串看看就明⽩了,不明⽩的我们可以互相交流,本⼈也是开发新⼿!Gson gson = new Gson();ng.reflect.Type type = new TypeToken<JsonBean>() {}.getType();JsonBean jsonBean = gson.fromJson(json, type);然后想拿数据就很简单啦,直接在jsonBean⾥⾯取就可以了!如果需要解析的Json嵌套了很多层,同样可以可以定义⼀个嵌套很多层内部类的Bean,需要细⼼的对照Json字段来定义哦。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JSON 的定义:
一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。
业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持,从而可以在不同平台间进行数据交换。
JSON 采用兼容性很高的文本格式,同时也具备类似于 C 语言体系的行为。
–
JSON Vs XML
1.JSON 和 XML 的数据可读性基本相同
2.JSON 和 XML 同样拥有丰富的解析手段
3.JSON 相对于 XML 来讲,数据的体积小
4.JSON 与 JavaScript 的交互更加方便
5.JSON 对数据的描述性比 XML 较差
6.JSON 的速度要远远快于 XML
android2.3提供的 json 解析类
android 的 json 解析部分都在包 org.json 下,主要有以下几个类:
JSONObject :可以看作是一个 json 对象 , 这是系统中有关 JSON 定义的基本单元, 其包含一对儿 (Key/Value数值。
它对外部 (External:应用 toString(方法输出的数值调用的响应体现为一个标准的字符串(例如:{"JSON": "Hello, World"},最外被大括号包裹,其中的 Key 和 Value 被冒号 ":"分隔。
其对于内部 (Internal行为的操作格式略微,例如:初始化一个 JSONObject 实例,引用内部的 put(方法添加数值:new JSONObject(.put("JSON", "Hello, World!", 在 Key 和 Value 之间是以逗号 "," 分隔。
Value 的类型包括:Boolean 、 JSONArray 、 JSONObject 、 Number 、 String 或者默认值 JSONObject.NULL object 。
JSONStringer :json 文本构建类 ,根据官方的解释,这个类可以帮助快速和便捷的创建 JSON text。
其最大的优点在于可以减少由于格式的错误导致程序异常, 引用这个类可以自动严格按照 JSON 语法规则 (syntax rules 创建 JSON
text 。
每个 JSONStringer 实体只能对应创建一个 JSON text。
其最大的优点在于可以减少由于格式的错误导致程序异常, 引用这个类可以自动严格按照 JSON 语法规则(syntax rules创建 JSON text。
每个 JSONStringer 实体只能对应创建一个JSON text。
JSONArray :它代表一组有序的数值。
将其转换为 String 输出 (toString所表现的形式是用方括号包裹, 数值以逗号”,” 分隔 (例如:[value1,value2,value3], 大家可以亲自利用简短的代码更加直观的了解其格式。
这个类的内部同样具有查询行为, get(和 opt(两种方法都可以通过 index 索引返回指定的数值, put(方法用来添加或者替换数值。
同样这个类的 value 类型可以包括:Boolean 、 JSONArray 、JSONObject 、 Number 、 String 或者默认值 JSONObject.NULL object 。
JSONTokener :json 解析类
JSONException :json 中用到的异常
JSONObject, JSONArray来构建 json 文本
getType 和 optType api的使用
getType 可以将要获取的键的值转换为指定的类型,如果无法转换或没有值则抛出 JSONException
optType 也是将要获取的键的值转换为指定的类型, 无法转换或没有值时返回用户提供或这默认提供的值
除了上面的两个类,还可以使用 JSONStringer 来构建 json 文本
json 文本解析类 JSONTokener
按照 RFC4627规范将 json 文本解析为相应的对象。
对于将 json 文本解析为对象,只需要用到该类的两个 api :构造函数public Object nextValue(;
其它的 api 基本就是用来查看 json 文本中的文本的
15. // 返回当前读取位置到第一次遇到字符串中(如"0089"任意字符之间的字符串,同时该字符是 trimmed 的。
(此处就是第一次遇到了 8 9) 16.
jsonParser.nextTo("0089"; //me" : "yuanzhifei 17. 18. // 读取位置撤销一个 19. jsonParser.back(; 20. jsonParser.next(; //i 21. 22. // 读取位置前进到指定字符串处(包括字符串) 23. jsonParser.skipPast("address"; 24. jsonParser.next(8; //" : { "c 25. 26. // 读取位置前进到执行字符处(不包括字符) 27. jsonParser.skipTo('m'; 28. jsonParser.next(8; //married" 29. } catch (JSONException ex { 30. // 异常处理代码 31. }。