什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同一时候也易于机器解析和生成,很适合于server与client的交互。JSON 採用与编程语言无关的文本格式,可是也使用了类C 语言的习惯。这些特性使JSON 成为理想的数据交换格式。
和 XML 一样,JSON 也是基于纯文本的数据格式。因为 JSON 天生是为 JavaScript 准备的,因此。JSON 的数据格式很easy,您能够用 JSON
传输一个简单的 String,Number。Boolean。也能够传输
一个数组。或者一个复杂的 Object 对象。String,Number 和 Boolean 用 JSON 表示很easy。
比如,用 JSON 表示一个简单的字符串
“ abc ”。其格式为:"abc"。
除了字符 "。,/ 和一些控制符(。f, 。 , )须要编码外,其它 Unicode 字符能够直接输出。
Boolean 类型表示为 true 或 false 。
此外,JavaScript 中的 null 被表示为 null,注意,true、false和 null 都没有双引號,否则将被视为一个 String 。
JSON 还能够表示一个数组对象,使用 [] 包括全部元素,每一个元素用逗号分隔。元素能够是随意的
Value。比如,下面数组包括了一个 String,Number。Boolean 和一个 null:
["abc",12345,false,null]
Object 对象在 JSON 中是用 {} 包括一系列无序的 Key-Value 键值对表示的。实际上此处的
Object 相当于 Java 中的 Map<String, Object>。而不是 Java 的 Class 。注意 Key 仅仅能用 String 表
示。比如,一个 Address 对象包括例如以下 Key-Value:
city:Beijing
street:Chaoyang Road
postcode:100025(整数)
用JSON 表演示样例如以下:
{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}当中 Value 也能够是还有一个 Object 或者数组,因此,复杂的 Object 能够嵌套表示,比如。一个
Person 对象包括 name 和 address 对象,能够表演示样例如以下:
{"name":"Michael","address": {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
}
以下写一个实例:(记得server端要先导包)
这是在我以前写好的代码上写的。我如今把主要代码写下。
新建一个servlet:
package cn.four.json; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.print.event.PrintServiceAttributeEvent; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import cn.four.service.Foundservice; import cn.four.service.FoundserviceImp; import cn.four.user.Found; public class JSONDemoServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Foundservice fd=new FoundserviceImp(); //我这是曾经写过的。继承接口 List<Found> list=fd.getfound(); //new 一个list JSONObject jsb=new JSONObject(); //new 一个JSONObject对象 jsb.put("foundlist",list); //得到转成后的数据 JSONArray fdarray=jsb.getJSONArray("foundlist"); //存到数组 response.setContentType("text/plain");//解决乱码 response.setCharacterEncoding("UTF-8"); PrintWriter out=response.getWriter(); out.write(fdarray.toString()); //关闭 out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }server端就这样结束了。
以下是android的介绍
Android SDK 提供了Apache 的HttpClient 类处理网络訪问,相信非常多读者朋友都在其它项目其中用
到过HttpClient。我写了一个方法类,获取某一网址的网页内容,代码例如以下:
package com.four.http; import java.io.BufferedReader; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; public class httpcontent { public String getContent(String url) throws Exception { StringBuilder sb = new StringBuilder(); HttpClient client = new DefaultHttpClient(); HttpParams httpParams = client.getParams(); // 设置网络超时參数 HttpConnectionParams.setConnectionTimeout(httpParams, 3000); HttpConnectionParams.setSoTimeout(httpParams, 5000); HttpResponse response = client.execute(new HttpGet(url)); HttpEntity entity = response.getEntity(); if (entity != null) { BufferedReader reader = new BufferedReader(new InputStreamReader( entity.getContent(), "UTF-8"), 8192); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + " "); } reader.close(); } return sb.toString(); } }
我感觉这就是一个固定的类,仅仅要用到JSON,就能够拿去用。临时没试,不知道对不正确啊。
package com.example.mychat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.json.JSONArray; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ListView; import android.widget.SimpleAdapter; import com.four.http.httpcontent; public class User_tips extends Activity { httpcontent content = new httpcontent(); private Button btnshua; private ListView xianshi; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_tips); btnshua = (Button) findViewById(R.id.btnshua); xianshi = (ListView) findViewById(R.id.listView1); btnshua.setOnClickListener(new shualistener()); } class shualistener implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub listxianshi(); } } private List<Map<String, Object>> getmessg(String url) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); String body; try { body = content.getContent(url); JSONArray array = new JSONArray(body); for (int i = 0; i < array.length(); i++) { JSONObject obj = array.getJSONObject(i); Map<String, Object> map = new HashMap<String, Object>(); map.put("foundname", obj.getString("foundname")); map.put("foundplace", obj.getString("foundplace")); list.add(map); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } private void listxianshi(){ try { String url = "http://10.20.180.34:8080/lostfound/JSONDemoServlet"; SimpleAdapter adapter = new SimpleAdapter(this, getmessg(url), R.layout.list_item, new String[] { "foundname", "username" }, new int[] { R.id.foundname, R.id.username }); xianshi.setAdapter(adapter); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
效果图: