android之JSON解析
阿新 • • 發佈:2018-12-24
Json解析
JavaScrip物件表示法(JavaScript Object Notation)JSON屬於輕量級文字資料交換格式
JSon獨立於平臺和語言JSON具有自我描述性更易於理解
類似Xml,比Xml更小,更快,更易解析
- Json檔案
資料儲存在{key: value}(鍵值對)中
{“info”:{“name”:”jack”,”age:”20,”salary”:3000,”愛好”:[“看電影”,”打程式碼”,”跑步”]}}
- Json語法
Key資料型別:
String
Value資料型別:
{} JsonObject 型別
[] 陣列型別
String 字串型別
Int,float 數值型別
- Json解析相關類
JsonObject
Json物件,裡面包含一個或多個鍵值對
JSONArray
Json陣列,內部元素由連結串列管理
//取出json屬豬中下標為index的元素
jsonArray.getString(index);
//Json陣列中的元素可以為任意型別
JsonArray。getInt(index);
JsonArray.getJSONObject(index);
JsonArray.getJSONArray(index);
例子
MainActivity.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.button1) {
// 解析Json
readJson("info.json");
} else if (v.getId() == R.id.button2) {
// 打包json
// {"info": {"name":"think in java", "price":100,"author":["Jack","Lily"]}, "number":50}
closeJson();
}
}
private void closeJson(){
JSONObject obj=new JSONObject();
try {
obj.put("number", 50);
JSONObject infoobj=new JSONObject();
infoobj.put("name", "thingk in java");
infoobj.put("price", 100);
JSONArray array=new JSONArray();
array.put(0, "Jack");
array.put(1, "Lily");
obj.put("author", array);
obj.put("info", infoobj);
Log.d("Tag", ""+obj);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void readJson(String string) {
try {
InputStream is = this.getResources().getAssets().open(string);
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
String json = br.readLine();
Log.d("Tag", json);
//建立json物件
JSONObject obj = new JSONObject(json);
//key為info的內容
JSONObject infoObj=obj.getJSONObject("info");
//取出名字
String name=infoObj.getString("name");
//取出年齡
int age=infoObj.getInt("age");
//取出收入
int salary = infoObj.getInt("salary");
Log.d("Tag", "name = "+name+",age = "+age+",+salary = "+salary);
JSONArray array=infoObj.getJSONArray("favor");
for (int i = 0; i < array.length(); i++) {
String favor = array.getString(i);
Log.d("Tag", "favor = "+favor);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.android_830_json.MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="103dp"
android:text="解析Json" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/button1"
android:layout_marginTop="100dp"
android:text="打包Json" />
</RelativeLayout>