Android基础之Json简单解析
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。和后台通信的时候经常使用JSON来进行数据的交换。
一、JSON语法
JSON使用键值对(KEY/VALUE)的形式来对数据进行存储的,每个数据之间用逗号( , )分隔,数组用方括号[] 保存,对象用花括号{}进行保存
/**
* json格式
* {
* "array": [1,2,3],//数组
* "boolean": true,//布尔值
* "null": null,//空值
* "number": 123,//数值
* "object": {
* //对象
* "a": "b",
* "c": "d",
* "e": "f"
* },
* "string": "Hello World"//字符串
* }
*/
二、JSON解析
在安卓当中,对JSON的解析主要依赖JSONObject 和JSONArray 两个类。
顾名思义,JSONObject表示是一个JSON对象,JSONArray表示的是JSON数组。当调用他们的toString()方法的时候,就可以得到这个JSON对象(数组)的标准字符串(所包含的内容)
前面提到JSON储存数据是用键值对的形式,那么在JSONObject和JSONArray中也有提供了和Map相似的put和get方法。
JSONObject jsonObject = new JSONObject(jsonString);
jsonObject.get("key");//获得对象
jsonObject.getDouble("key");
jsonObject.getLong("key");
jsonObject.getBoolean("key");
jsonObject.getInt("key");
jsonObject.getJSONArray("key");//获得JSON数组
jsonObject.getJSONObject("key");//获得JSON对象
jsonObject.getString("key");
//第二个参数可以是int,long,double,boolean,object
jsonObject.put("key",value);
JSONArray jsonArray = new JSONArray(jsonString);
jsonArray.put(index,value);
jsonArray.put(value);
接下来用上面提到获取JSON数据的方法来进行简单的JSON解析
下面是android的简单demo
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class MainActivity extends AppCompatActivity {
/**
* json格式
* {
* "array": [1,2,3],
* "boolean": true,
* "null": null,
* "number": 123,
* "object": {
* "a": "b",
* "c": "d",
* "e": "f"
* },
* "string": "Hello World"
* }
*/
TextView textView;
private String jsonString =
"{" +
"\"uid\": 10000000, " +
"\"name\": \"张三\"," +
"\"friends\":[\"李四\",\"王五\"]," +
"\"address\": \"QuantaCenter\", " +
" \"age\": 18," +
" \"tasks\": { \"content\": \"Quanta杯\", \"finished\": false,\"members\": [{\"uid\": 111.1, \"username\": \"赵六\"}, {\"uid\": 121.1, \"username\":\"孙七\"}]}" +
"}";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.text);
Button btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
parseJSON();
}
});
}
private void parseJSON() {
try {
JSONObject jsonObject = new JSONObject(jsonString);
long uid = jsonObject.getLong("uid");
String name = jsonObject.getString("name");
JSONArray friends = jsonObject.getJSONArray("friends");
String friend1 = (String) friends.get(0);
String friend2 = (String) friends.get(1);
String address = jsonObject.getString("address");
int age = jsonObject.getInt("age");
JSONObject tasks = jsonObject.getJSONObject("tasks");
String task = parseMultiJSON(tasks);
String jsonParsed = "uid:" + uid + "\nname" + name + "\nfriend1:" + friend1 + " friend2:" + friend2
+ "\naddress:" + address + "\nage" + age + "\ntask:" + task;
textView.setText(jsonParsed);
} catch (JSONException e) {
e.printStackTrace();
}
}
private String parseMultiJSON(JSONObject jsonObject) throws JSONException {
String buffer = "";
String content = jsonObject.getString("content");
boolean finished = jsonObject.getBoolean("finished");
buffer += "\ncontent:"+content+" finished:"+finished;
JSONArray members = jsonObject.getJSONArray("members");
for (int i = 0; i < members.length(); i++) {
JSONObject object = (JSONObject) members.get(i);
double uid = object.getDouble("uid");
String username = object.getString("username");
buffer += "\nuid:"+uid+" username:"+username;
}
return buffer;
}
}
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello world"/>
<Button
android:text="get"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"/>
</LinearLayout>
三、生成JSON字符串
主要利用JSONObject的put()和toString()方法,使用put()方法插入数据,使用toString()方法来生成标准的JSON字符串
//生成如下的JSON字符串
//"{
// "uid": 10000000,
// "name": "张三",
// "friends":["李四","王五"],
// }"
JSONObject jsonObject = new JSONObject();
jsonObject.put("uid",100);
jsonObject.put("name", "张三");
JSONArray friends = new JSONArray();
friends.put("李四");
friends.put("王五");
jsonObject.put("friends", friends);
String json = jsonObject.toString();