Json的生成和解析
Posted 丛林小阁楼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Json的生成和解析相关的知识,希望对你有一定的参考价值。
json是常见的数据格式,生成和解析是常用的操作。android中,默认提供orgJson供我们使用,除此之外,google也提供了Gson库方便我们开发。
Json样例类
package com.fxb.jsontest; import android.content.Context; import android.util.Log; import android.widget.Toast; import com.google.gson.Gson; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class JsonUtils { public static String createJson(){ try { JSONObject json = new JSONObject(); json.put("key1", "value1"); json.put("key2", "value2"); JSONObject json1 = new JSONObject(); json1.put("key3", "value3"); json1.put("key4", "value4"); json.put("child1", json1); JSONObject json2 = new JSONObject(); json2.put("key5", "value5"); json2.put("key6", "value6"); json1.put("child2", json2); JSONObject json3 = new JSONObject(); json3.put("key7", "value7"); json3.put("key8", "value8"); json2.put("child2", json3); JSONArray arr = new JSONArray(); JSONObject json4 = new JSONObject(); json4.put("key9", "value9"); json4.put("key10", "value10"); arr.put(json4); JSONObject json5 = new JSONObject(); json5.put("key11", "value11"); json5.put("key12", "value12"); arr.put(json5); json3.put("child3", arr); // Log.i("JsonTest", json.toString()); return json.toString(); } catch (JSONException e) { e.printStackTrace(); return null; } } public static void orgJsonTest(Context context){ String str = "{\"key1\":\"value1\",\"key2\":\"value2\",\"child1\":{\"key3\":\"value3\",\"key4\":\"value4\",\"child2\":{\"key5\":\"value5\",\"key6\":\"value6\",\"child3\":{\"key7\":\"value7\",\"key8\":\"value8\",\"child4\":[{\"key9\":\"value9\",\"key10\":\"value10\"},{\"key11\":\"value11\",\"key12\":\"value12\"}]}}}}"; try { JSONObject jsonRoot = new JSONObject(str); JSONObject jsonChild3 = jsonRoot.getJSONObject("child1").getJSONObject("child2").getJSONObject("child3"); if(jsonChild3 != null){ String str7 = jsonChild3.getString("key7"); String str8 = jsonChild3.getString("key8"); JSONArray jsonArr = jsonChild3.getJSONArray("child4"); JSONObject jsonChild4_1 = jsonArr.getJSONObject(0); String str9 = jsonChild4_1.getString("key9"); String str10 = jsonChild4_1.getString("key10"); // Log.i(MainActivity.TAG, "str7:"+str7+", str8:"+str8); // Log.i(MainActivity.TAG, "str9:"+str9+", str10:"+str10); String strShow = "str7:"+str7+", str8:"+str8 + "\n"+"str9:"+str9+", str10:"+str10; showToast(context, strShow); } else{ Log.i(MainActivity.TAG, "empty"); } } catch (JSONException e) { e.printStackTrace(); } } public static void gsonTest(Context context){ Gson gson = new Gson(); int i = gson.fromJson("100", int.class); double d = gson.fromJson("1.234", double.class); boolean b = gson.fromJson("true", boolean.class); final String strPerson = "{\"id\":5678,\"name\":\"Jack\",\"isWell\":\"true\",\"adress\":\"beijing\"}"; Person person = gson.fromJson(strPerson, Person.class); Toast.makeText(context, "i:" + i + "\nd:" + d + "\nb:" + b + "\nperson\n" + person.show(), Toast.LENGTH_SHORT).show(); } public static void showToast(Context context, String str){ Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); } public static class Person{ private int id; private String name; private boolean isWell; private String adress; public String show(){ return "id="+id+", isWell="+ isWell +", adress="+adress; } } }
测试Activity类
package com.fxb.jsontest; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends Activity implements View.OnClickListener { public static final String TAG = "JsonTest"; private Button btnCreateJson, btnOrgJson, btnGson, btnFastJson; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView(){ btnCreateJson = (Button)findViewById(R.id.btnCreateJson); btnOrgJson = (Button)findViewById(R.id.btnOrgJson); btnGson = (Button)findViewById(R.id.btnGson); btnFastJson = (Button)findViewById(R.id.btnFastJson); btnCreateJson.setOnClickListener(this); btnOrgJson.setOnClickListener(this); btnGson.setOnClickListener(this); btnFastJson.setOnClickListener(this); } @Override public void onClick(View v) { if(v == btnCreateJson){ String str = JsonUtils.createJson(); Log.i(TAG, str); } else if(v == btnOrgJson){ JsonUtils.orgJsonTest(this); } else if(v == btnGson){ } else if(v == btnFastJson){ } } }
样例中,成功创建了json字符串,并实现了解析。
以上是关于Json的生成和解析的主要内容,如果未能解决你的问题,请参考以下文章
ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项
VS Code配置snippets代码片段快速生成html模板,提高前端编写效率
使用 json rereiver php mysql 在片段中填充列表视图