android 在服务器端生成json格式数据,在客户端怎么解析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 List<Person> getListPerson()
List<Person> mLists = new ArrayList<Person>();
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();
List<Person> 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 浏览器输入http://localhost/JsonWeb/JsonServlet直接访问结果如下:
["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 List<Person> getListPerson(String urlPath) throws Exception
List<Person> mlists = new ArrayList<Person>();
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 = "http://10.16.31.207/JsonWeb/JsonServlet";
private static final String TAG = "MainActivity";
private List<Person> 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);
List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < persons.size(); i++)
HashMap<String, Object> map = new HashMap<String, 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());
参考技术A
1、生成JSON格式数据,有对应的后台类处理,如果你是做Android开发,后台提供获取数据的接口
2、客户端解决:
JSONArray jsonArr = new JSONArray(json);for (int i = 0; i < jsonArr.length(); i++)
JSONObject jsonObj = jsonArr.getJSONObject(i);
boolean isChild = jsonObj.has("childrenNodes");
AreaBean bean = new AreaBean(jsonObj.getString("id"),
jsonObj.getString("parentId"),
jsonObj.getString("name"));
mList.add(bean);
if (isChild)
mchildNodesList.add(jsonObj.getString("childrenNodes"));
else
mchildNodesList.add(null);
AJAX---响应数据格式
响应数据格式
提问:如果希望服务端返回一个复杂数据,该如何处理?
关心的问题就是: 服务端发出何种格式的数据,这种格式如何在客户端用 JavaScript 解析。
XML
一种数据描述手段
比较老, 基本现在的项目不用了。
淘汰的原因:数据冗余太多
JSON
也是一种数据描述手段,类似于 JavaScript 字面量方式
服务端采用 JSON 格式返回数据,客户端按照 JSON 格式解析数据。
不管是 JSON 也好,还是 XML,只是在 AJAX 请求过程中用到,并不代表它们之间有必然的联系,它们只是 数据协议罢了
以上是关于android 在服务器端生成json格式数据,在客户端怎么解析的主要内容,如果未能解决你的问题,请参考以下文章
生成的json对象,用express发送post请求到服务端,JSON.stringify后保存到服务器后数据格式变得很奇怪?