android---(xml、json解析)

这里写图片描述

这里写图片描述

这里写图片描述

public class XMLparse extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xmlparse);
    }


    /***
     * 使用 pull 解析 xml文件
     *
     * @param view
     */
    public void xmlPullClic(View view) {

        ArrayList<Person> plist = parse();//解析xml
        for (int i = 0; i < plist.size(); i++) {
            System.out.print(plist.get(i));
        }
    }

    private ArrayList<Person> parse() {

        //封装xmL节点信息
        ArrayList<Person> list = new ArrayList<Person>();

        //封装对象
        Person p = null;

        //创建xml 解析器
        XmlPullParser pull = Xml.newPullParser();

        // StringReader st = new StringReader(xml);

        InputStream in = getResources().openRawResource(R.raw.info);

        try {
            pull.setInput(in, "utf-8");//xml文件流

            int eventType = pull.getEventType();//获取当前的事件类型
            while (eventType != XmlPullParser.END_DOCUMENT) {
                switch (eventType) {
                    case XmlPullParser.START_TAG:
                        //开时位置时 :读取内容
                        String tag = pull.getName();//标记名称

                        if ("person".equals(tag)) {
                            p = new Person();
                            p.setId(Integer.parseInt(pull.getAttributeValue(null, "id"))); //获取标记属性 id
                        } else if ("name".equals(tag)) {
                            p.setName(pull.nextText());//因为文本在标记里面,所以要用 nextText()
                        } else if ("age".equals(tag)) {
                            p.setAge(Integer.parseInt(pull.nextText()));
                        } else if ("sex".equals(tag)) {
                            p.setSex(pull.nextText());
                        } else if ("tel".equals(tag)) {
                            p.setTel(pull.nextText());
                        } else if ("address".equals(tag)) {
                            p.setAddress(pull.nextText());
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        if ("person".equals(pull.getName())) {
                            list.add(p);
                        }
                        break;
                }

                eventType = pull.next();//下一个事件类型
            }

        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list; //xml解析后返回的结果
    }
}

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

public class XMLparse extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xmlparse);
    }

    /**
     * json 解析
     *
     * @param v
     */
    public void jsonRead(View v) {
        ArrayList list = jsonread();//json解析

        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i));
        }
    }

    private ArrayList jsonread() {
        //json数据
        String json = "{\"user\": [{\"firstname\": \"ma\", \"lastname\": \"we\", \"name\": \"mail\"}, {\"firstname\": \"zhang\", \"lastname\": \"bin\", \"name\": \"janbin\"}] } }";

        ArrayList<ps> pslist = new ArrayList<ps>();


        JsonReader jsonReader = new JsonReader(new StringReader(json));

        try {
            jsonReader.beginArray();//开始解析数组
            while (jsonReader.hasNext()) {

                ps p = new ps();//创建对象
                jsonReader.beginObject();
                while (jsonReader.hasNext()) {//开始解析对象
                    String name = jsonReader.nextName();
                    if ("firstname".equals(name)) {
                        p.firstname = jsonReader.nextString();

                    } else if ("lastname".equals(name)) {
                        p.lastname = jsonReader.nextString();
                    } else if ("name".equals(name)) {
                        p.name = jsonReader.nextName();
                    }
                }
                jsonReader.endObject();//结束对象的解析
                pslist.add(p);
            }
            jsonReader.endArray();//结束数据的解析
        } catch (IOException e) {
            e.printStackTrace();
        }
        return pslist;
    }


    /**
     * 生成json 数据
     *
     * @param v
     */
    public void createJSON(View v) {

        //数据对象
        ArrayList<Person> list = new ArrayList<>();
        Person p1 = new Person();
        p1.setName("zhang");
        p1.setId(1);
        p1.setAddress("北京");
        p1.setAge(23);
        p1.setTel("123456789");
        p1.setSex("男");

        Person p2 = new Person();
        p2.setName("wei");
        p2.setId(2);
        p2.setAddress("上海");
        p2.setAge(25);
        p2.setTel("9874561230");
        p2.setSex("女");

        list.add(p1);
        list.add(p2);

        //存放json数据
        JSONObject json = new JSONObject();

        //存入json 对象
        JSONArray array = new JSONArray();

        try {
            //将数组中的对象 生成json数据
            for (int i = 0; i < list.size(); i++) {
                Person p = list.get(i);
                JSONObject obj = new JSONObject();

                obj.put("name", p.getName());
                obj.put("id", p.getId());
                obj.put("age", p.getAge());
                obj.put("sex", p.getSex());
                obj.put("tel", p.getTel());
                obj.put("address", p.getAddress());

                array.put(obj);//将对象存入数组中
            }

            json.put("user", array);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        System.out.print(json.toString());
    }


    /***
     * 第三方工具 生成json Gson
     *
     * @param v
     */
    public void Gjson(View v) {
        //数据对象
        ArrayList<Person> list = new ArrayList<>();
        Person p1 = new Person();
        p1.setName("zhang");
        p1.setId(1);
        p1.setAddress("北京");
        p1.setAge(23);
        p1.setTel("123456789");
        p1.setSex("男");

        Person p2 = new Person();
        p2.setName("wei");
        p2.setId(2);
        p2.setAddress("上海");
        p2.setAge(25);
        p2.setTel("9874561230");
        p2.setSex("女");

        list.add(p1);
        list.add(p2);


        Gson gson = new Gson();

        Type type = new TypeToken<ArrayList<Person>>() {}.getType();
        gson.toJson(list, type);
        System.out.print(gson.toString());
    }


    /***
     * 第三方工具 解析json Gson
     *
     * @param v
     */
    public void GjsonParse(View v) {
        String json = "{\"firstname\": \"ma\", \"lastname\": \"we\", \"name\": \"mail\"}, {\"firstname\": \"zhang\", \"lastname\": \"bin\", \"name\": \"janbin\"}";

        Type type = new TypeToken<ArrayList<ps>>() {
        }.getType();

        Gson gson = new Gson();
        ArrayList<ps> list = gson.fromJson(json, type);

        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i));
        }


    }

}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值