本文目錄一覽:
怎麼在android客戶端解析json數據
這個格式使用如下代碼解析try { JSONObject jsonObject = new JSONObject(json); JSONObject weatherinfo = jsonObject.getJSONObject(“weatherinfo”); System.out.println(weatherinfo.getString(“city”)); System.out.println(weatherinfo.getString(“cityid”)); System.out.println(weatherinfo.getString(“temp”)); System.out.println(weatherinfo.getString(“WD”));} catch (JSONException e) { e.printStackTrace();} 其中第一行代碼 JSONObject jsonObject = new JSONObject(json);//json 即為你的字元串 比如現在天氣信息是多個城市的,並非只有北京市。{“weatherinfo”:[{“city”:”北京”,”cityid”:”101010100″,”temp”:”4″,”WD”:”東風”,”WS”:”2級”,”SD”:”75%”,”WSE”:”2″,”time”:”10:45″,”isRadar”:”1″,”Radar”:”JC_RADAR_AZ9010_JB”,”njd”:”暫無實況”,”qy”:”1011″},{“city”:”天津”,”cityid”:”101010100″,”temp”:”4″,”WD”:”東風”,”WS”:”2級”,”SD”:”75%”,”WSE”:”2″,”time”:”10:45″,”isRadar”:”1″,”Radar”:”JC_RADAR_AZ9010_JB”,”njd”:”暫無實況”,”qy”:”1011″}]}以下代碼適用。 try { JSONObject jsonObject=new JSONObject(json); JSONArray jsonArray=jsonObject.getJSONArray(“weatherinfo”); for (int i=0;ijsonArray.length();i++){ JSONObject object = jsonArray.getJSONObject(i); System.out.println(object.getString(“city”)); System.out.println(object.getString(“cityid”)); System.out.println(object.getString(“temp”)); System.out.println(object.getString(“WD”)); }} catch (JSONException e) { e.printStackTrace();}
如何解析返回的json格式數據
json數據格式解析我自己分為兩種;
一種是普通的,一種是帶有數組形式的;
普通形式的:
伺服器端返回的json數據格式如下:
複製代碼代碼如下:
{“userbean”:{“Uid”:”100196″,”Showname”:”\u75af\u72c2\u7684\u7334\u5b50″,”Avtar”:null,”State”:1}}
分析代碼如下:
複製代碼代碼如下:
// TODO 狀態處理 500 200
int res = 0;
res = httpClient.execute(httpPost).getStatusLine().getStatusCode();
if (res == 200) {
/*
* 當返回碼為200時,做處理
* 得到伺服器端返回json數據,並做處理
* */
HttpResponse httpResponse = httpClient.execute(httpPost);
StringBuilder builder = new StringBuilder();
BufferedReader bufferedReader2 = new BufferedReader(
new InputStreamReader(httpResponse.getEntity().getContent()));
String str2 = “”;
for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2
.readLine()) {
builder.append(s);
}
Log.i(“cat”, “” + builder.toString());
JSONObject jsonObject = new JSONObject(builder.toString())
.getJSONObject(“userbean”);
String Uid;
String Showname;
String Avtar;
String State;
Uid = jsonObject.getString(“Uid”);
Showname = jsonObject.getString(“Showname”);
Avtar = jsonObject.getString(“Avtar”);
State = jsonObject.getString(“State”);
帶數組形式的:
伺服器端返回的數據格式為:
複製代碼代碼如下:
{“calendar”:
{“calendarlist”:
[
{“calendar_id”:”1705″,”title”:”(\u4eb2\u5b50)ddssd”,”category_name”:”\u9ed8\u8ba4\u5206\u7c7b”,”showtime”:”1288927800″,”endshowtime”:”1288931400″,”allDay”:false},
{“calendar_id”:”1706″,”title”:”(\u65c5\u884c)”,”category_name”:”\u9ed8\u8ba4\u5206\u7c7b”,”showtime”:”1288933200″,”endshowtime”:”1288936800″,”allDay”:false}
]
}
}
分析代碼如下:
複製代碼代碼如下:
// TODO 狀態處理 500 200
int res = 0;
res = httpClient.execute(httpPost).getStatusLine().getStatusCode();
if (res == 200) {
/*
* 當返回碼為200時,做處理
* 得到伺服器端返回json數據,並做處理
* */
HttpResponse httpResponse = httpClient.execute(httpPost);
StringBuilder builder = new StringBuilder();
BufferedReader bufferedReader2 = new BufferedReader(
new InputStreamReader(httpResponse.getEntity().getContent()));
String str2 = “”;
for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2
.readLine()) {
builder.append(s);
}
Log.i(“cat”, “” + builder.toString());
/**
* 這裡需要分析伺服器回傳的json格式數據,
*/
JSONObject jsonObject = new JSONObject(builder.toString())
.getJSONObject(“calendar”);
JSONArray jsonArray = jsonObject.getJSONArray(“calendarlist”);
for(int i=0;ijsonArray.length();i++){
JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);
CalendarInfo calendarInfo = new CalendarInfo();
calendarInfo.setCalendar_id(jsonObject2.getString(“calendar_id”));
calendarInfo.setTitle(jsonObject2.getString(“title”));
calendarInfo.setCategory_name(jsonObject2.getString(“category_name”));
calendarInfo.setShowtime(jsonObject2.getString(“showtime”));
calendarInfo.setEndtime(jsonObject2.getString(“endshowtime”));
calendarInfo.setAllDay(jsonObject2.getBoolean(“allDay”));
calendarInfos.add(calendarInfo);
}
總結,普通形式的只需用JSONObject ,帶數組形式的需要使用JSONArray 將其變成一個list。
json 怎麼解析
一、 JSON (JavaScript Object Notation)一種簡單的數據格式,比xml更輕巧。
Json建構於兩種結構:
1、「名稱/值」對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀錄(record),結構(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關聯數組 (associative array)。 如:
{
「name」:」jackson」,
「age」:100
}
2、值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)如:
{
「students」:
[
{「name」:」jackson」,「age」:100},
{「name」:」michael」,」age」:51}
]
}
二、java解析JSON步驟
A、伺服器端將數據轉換成json字元串
首先、伺服器端項目要導入json的jar包和json所依賴的jar包至builtPath路徑下(這些可以到JSON-lib官網下載:)
然後將數據轉為json字元串,核心函數是:
public static String createJsonString(String key, Object value)
{
JSONObject jsonObject = new JSONObject();
jsonObject.put(key, value);
return jsonObject.toString();
}
B、客戶端將json字元串轉換為相應的javaBean
1、客戶端獲取json字元串(因為android項目中已經集成了json的jar包所以這裡無需導入)
public class HttpUtil
{
public static String getJsonContent(String urlStr)
{
try
{// 獲取HttpURLConnection連接對象
URL url = new URL(urlStr);
HttpURLConnection httpConn = (HttpURLConnection) url
.openConnection();
// 設置連接屬性
httpConn.setConnectTimeout(3000);
httpConn.setDoInput(true);
httpConn.setRequestMethod(“GET”);
// 獲取相應碼
int respCode = httpConn.getResponseCode();
if (respCode == 200)
{
return ConvertStream2Json(httpConn.getInputStream());
}
}
catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return “”;
}
private static String ConvertStream2Json(InputStream inputStream)
{
String jsonStr = “”;
// ByteArrayOutputStream相當於內存輸出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
// 將輸入流轉移到內存輸出流中
try
{
while ((len = inputStream.read(buffer, 0, buffer.length)) != -1)
{
out.write(buffer, 0, len);
}
// 將內存流轉換為字元串
jsonStr = new String(out.toByteArray());
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonStr;
}
}
2、獲取javaBean
public static Person getPerson(String jsonStr)
{
Person person = new Person();
try
{// 將json字元串轉換為json對象
JSONObject jsonObj = new JSONObject(jsonStr);
// 得到指定json key對象的value對象
JSONObject personObj = jsonObj.getJSONObject(“person”);
// 獲取之對象的所有屬性
person.setId(personObj.getInt(“id”));
person.setName(personObj.getString(“name”));
person.setAddress(personObj.getString(“address”));
}
catch (JSONException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return person;
}
public static ListPerson getPersons(String jsonStr)
{
ListPerson list = new ArrayListPerson();
JSONObject jsonObj;
try
{// 將json字元串轉換為json對象
jsonObj = new JSONObject(jsonStr);
// 得到指定json key對象的value對象
JSONArray personList = jsonObj.getJSONArray(“persons”);
// 遍歷jsonArray
for (int i = 0; i personList.length(); i++)
{
// 獲取每一個json對象
JSONObject jsonItem = personList.getJSONObject(i);
// 獲取每一個json對象的值
Person person = new Person();
person.setId(jsonItem.getInt(“id”));
person.setName(jsonItem.getString(“name”));
person.setAddress(jsonItem.getString(“address”));
list.add(person);
}
}
catch (JSONException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
android 在伺服器端生成json格式數據,在客戶端怎麼解析
因為這次要從伺服器端得到Json數據,並且通過解析之後把解析後的數據顯示在Android客戶端中,首先部署伺服器端代碼(直接使用Jsp/Servlet):
構造的Json數據如下:
[{“name”:”張三”,”address”:”北京”,”age”:20},{“name”:”李四”,”address”:”上海”,”age”:30},{“name”:”王五”,”address”:”深圳”,”age”:35}]
[一]伺服器端(Person.java省略):
①:數據構造JsonService.java
public class JsonService {
public static ListPerson getListPerson() {
ListPerson mLists = new ArrayListPerson();
mLists.add(new Person(“張三”, “北京”, 20));
mLists.add(new Person(“李四”, “上海”, 30));
mLists.add(new Person(“王五”, “深圳”, 35));
return mLists;
}
②:Servlet的代碼(包括構造Json數據,沒有使用Json數據轉換方法)JsonServlet.java
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“text/html”);
response.setCharacterEncoding(“UTF-8”);
PrintWriter out = response.getWriter();
ListPerson persons = JsonService.getListPerson();
StringBuffer sb = new StringBuffer();
sb.append(‘[‘);
for (Person person : persons) {
sb.append(‘{‘).append(“\”name\”:”).append(“\””+person.getName()+”\””).append(“,”); sb.append(“\”address\”:”).append(“\””+person.getAddress()+”\””).append(“,”);
sb.append(“\”age\”:”).append(person.getAge());
sb.append(‘}’).append(“,”);
}
sb.deleteCharAt(sb.length() – 1);
sb.append(‘]’);
out.write(new String(sb));
out.flush();
out.close();
}
③:部署到Tomact 瀏覽器輸入直接訪問結果如下:
[{“name”:”張三”,”address”:”北京”,”age”:20},{“name”:”李四”,”address”:”上海”,”age”:30},{“name”:”王五”,”address”:”深圳”,”age”:35}]
至此伺服器端代碼編碼完成,下面進行客戶端代碼編寫; (二)客戶端(Person類,和展示數據的布局文件因為簡單省去) ①:獲取伺服器端的Json數據並且解析的工具類JsonParse.java 必要的需要導入的包省去
public class JsonParse {
/**
* 解析Json數據
*
* @param urlPath
* @return mlists
* @throws Exception
*/
public static ListPerson getListPerson(String urlPath) throws Exception {
ListPerson mlists = new ArrayListPerson();
byte[] data = readParse(urlPath);
JSONArray array = new JSONArray(new String(data));
for (int i = 0; i array.length(); i++) {
JSONObject item = array.getJSONObject(i);
String name = item.getString(“name”);
String address = item.getString(“address”);
int age = item.getInt(“age”);
mlists.add(new Person(name, address, age));
}
return mlists;
}
/**
* 從指定的url中獲取位元組數組
*
* @param urlPath
* @return 位元組數組
* @throws Exception
*/
public static byte[] readParse(String urlPath) throws Exception {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int len = 0;
URL url = new URL(urlPath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream inStream = conn.getInputStream();
while ((len = inStream.read(data)) != -1) {
outStream.write(data, 0, len);
}
inStream.close();
return outStream.toByteArray();
}
}
②:主Activity類
public class MainActivity extends Activity {
private Button mButton;
private ListView mListView;
//使用IP不能使用localhost或者127.0.0.1,因為android模擬器默認綁定這個IP,這裡應該訪問區域網IP
private static final String urlPath = “”;
private static final String TAG = “MainActivity”;
private ListPerson persons;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button) findViewById(R.id.button1);
mListView = (ListView) findViewById(R.id.listView1);
mButton.setOnClickListener(new MyOnClickListener());
}
private class MyOnClickListener implements OnClickListener {
@Override
public void onClick(View v) {
try {
// 得到Json解析成功之後數據
persons = JsonParse.getListPerson(urlPath);
ListHashMapString, Object data = new ArrayListHashMapString, Object();
for (int i = 0; i persons.size(); i++) {
HashMapString, Object map = new HashMapString, Object();
map.put(“name”, persons.get(i).getName());
map.put(“address”, persons.get(i).getAddress());
map.put(“age”, persons.get(i).getAge());
data.add(map);
}
//初始化適配器,並且綁定數據
SimpleAdapter _Adapter = new SimpleAdapter(MainActivity.this,
data, R.layout.listview_item, new String[] { “name”,
“address”, “age” }, new int[] { R.id.textView1,
R.id.textView2, R.id.textView3 });
mListView.setAdapter(_Adapter);
} catch (Exception e) {
Toast.makeText(MainActivity.this, “解析失敗”, 2000).show();
Log.i(TAG, e.toString());
}
}
}
JSON解析。
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class BMI
{
public static void main(String[] args)
{
String res =
“{\”showapi_res_code\”:0,\”showapi_res_error\”:\”\”,\”showapi_res_body\”:{\”ret_code\”:0,\”basic\”:{\”explains\”:[\”n. 代碼,密碼;編碼;法典\”,\”vt. 編碼;製成法典\”,\”vi. 指定遺傳密碼\”]}}}”;
JSONObject obj = JSONObject.fromString(res);
JSONObject body = obj.getJSONObject(“showapi_res_body”);
JSONObject basic = body.getJSONObject(“basic”);
JSONArray explains = basic.getJSONArray(“explains”);
for(int i = 0; i explains.length(); i++)
{
System.out.println(explains.get(i));
}
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/194550.html