IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> xml和json -> 正文阅读

[开发工具]xml和json

?xml超文本标记语言

XML(可扩展标记语言)语法格式


??? 1. XML文档声明, 必须在有效内容的第一行。

??? <?xml version="1.0" encoding="UTF-8" ?>

??? 2. 标记 (元素/标签/节点)

? ? ? ? ? ? 语法格式:
??????????????? XML文档,就是由一个个的标记组成的。一个标记分为开始和结束,格式如下:
??????????????? 开始标记:<标记名称>
??????????????? 结束标记:</标记名称>

??????????????? 强调:
??????????????????? 开始标记和结束标记中间的部分,我们称其为标记内容。
??????????????????? 标记是可以嵌套的
??????????????????? 标记名称是可以重复的。
??????????? 标记名称(可以自定义),命名规则:
??????????????? 1. 名称可以包含字母、数字、以及其他字符
??????????????? 2. 名称不能以数字或标点符号开头。
??????????????? 3. 名称不能以字符xml 或 XML 或 Xml开始
??????????????? 4. 名称不能包含空格,不能包含冒号
??????????????? 5. 名称严格区分大小写

??????????? 示例,我们通过XML描述一个人的姓名。
??????????????? <name>王柏</name>
??????????? 示例,我们通过XML描述一个人的年龄。
??????????????? <age>18</age>
??????????? 示例,我们通过XML描述一个人的信息
??????????????? <person>
??????????????????? <name>王柏</name>
??????????????????? <age>18</age>
??????????????? </person>


??? 3. 一个XML文档,有且仅有一个根标记

? ? ? ? ? ? 正例:
??????????????? <persons>
??????????????????? <person>
??????????????????????? <name>王柏</name>
??????????????????????? <age>18</age>
??????????????????? </person>
??????????????????? <person>
??????????????????????? <name>小鸣</name>
??????????????????????? <age>19</age>
??????????????????? </person>
??????????????? </persons>
??????????? 反例:
??????????????? <person>
??????????????????? <name>王柏</name>
??????????????????? <age>18</age>
??????????????? </person>
??????????????? <person>
??????????????????? <name>小鸣</name>
??????????????????? <age>19</age>
??????????????? </person>


??? 4. 标记允许嵌套,但是不允许交叉。

? ? ? ?反例:
??????????????? <persons>
??????????????????? <person>
??????????????????????? <name>王柏</name>
??????????????????? <person>
??????????????????????? <age>18</age>
??????????????????? </person>
??????????????????????? name>小鸣</name>
??????????????????? </person>
??????????????? </persons>

??? 5. 标记的层级关系(子、父、祖先、后代、兄弟)

? ? ? ? ? ? 例如:
??????????????? <persons>
??????????????????? <person>
??????????????????????? <name>王柏</name>
??????????????????????? <age>18</age>
??????????????????? </person>
??????????????????? <person>
??????????????????????? <name>小鸣</name>
??????????????????????? <age>19</age>
??????????????????? </person>
??????????????? </persons>
??????????? person是persons的子标记
??????????? person是name标记的父标记
??????????? persons是name标记的祖先标记
??????????? name标记是persons的后代标记
??????????? name是age的兄弟标记

? ? 6. 标记中的属性

? ? ? ? ? ? 属性在标记开始时描述,由一个个的属性名和属性值组成。
??????????? 格式:
??????????????? 在开始标记中,可以包含0-n个属性,每一个属性都是一个键值对,包含了名称内容。
??????????????? 单个标签中的属性名称不能重复,键值对的键与值之间通过等号链接,多个键值对之间通过空格分割。属性值必须被引号引住
??????????? 例如:
??????????????? <persons>
??????????????????? <person id="1001">
??????????????????????? <name>王柏</name>
??????????????????????? <age>18</age>
??????????????????? </person>
??????????????????? <person id="1002">
??????????????????????? <name>小鸣</name>
??????????????????????? <age>19</age>
??????????????????? </person>
??????????????? </persons>


? ? 7 多行注释

? ? ? ? 注意:注释不能编写在文档声明之前
??????? 注释开始:<!--
??????? 注释结束:-->

??? 练习:描述一组书books,包含3本书book,每本书有一个id属性,和name以及description子标签。

??? 格式的进阶:
??????? 我们经常在XML描述的标签内容中,编写XML的关键符号,例如:<>

??????? 案例与解决办法:
??????? 案例:描述人的姓名时,在姓名的前面加上< 后面加上 >
??????? 解决办法1:
??????????? 通过CDATA区域来原样显示
??????????? <person>
??????????????? <name><![CDATA[<张三>]]></name>
??????????? </person>
??????? 解决办法2:
??????????? 通过转义字符,来描述特殊符号:
??????????? <person>
???????????????? <name>&lt;张三&gt;</name>
??????????? </person>

json数据交换格式

JSON: JS对象简谱, 是JavaScript中的创建对象的方式。? 现在被大量的用于数据交换。
?? 是一种轻量级的数据交换格式。

描述一本书:
??? book
??????? name
??????? description

Java:
??? 1. 创建类
??? class Book{
??????? private String name;
??????? ....
??? }
??? 2. 根据类,创建对象
??? Book book = new Book();
??? book.setName...
??? ...

XML:
??? <book>
??????? <name>书名</name>
??????? <description>介绍</description>
??? </book>

JS普通方式:
??? book = new Object();
??? book.name = "书名";
??? book.description = "介绍";

JS对象简谱方式(JSON):
??? book = {
??????? "name":"书名",
??????? "description":"介绍"
??? };

JSON语法:
??? JSON中包含两种大的格式:
??????? 1. 对象 。 2. 数组 。 对象和数组之间可以互相嵌套。
??????? 对象的格式:
??????????? 对象本身:一个大括号{},就表示一个对象。括号中的内容是对象的属性列表。
??????????? 属性列表:通过一个个的键值对来描述属性,单个属性的键与值通过冒号链接,多个属性之间通过逗号分割。
??????????????????? 键值对的键,建议通过引号引住(JS中可以不引住,部分Java解析器要求必须加引号)
??????????????????? 键值对的值,可以是JS中的任意数据类型,当数据是字符串时,应通过引号引住。
??????????? 例如:
??????????????? {
??????????????????? "name":"书名",
??????????????????? "description":"介绍"
??????????????? }
??????? 数组的格式:
??????????? 数组本身:一个中括号[],就表示一个数组。括号中是数组的元素列表。
??????????? 元素列表: 每一个元素可以是JS中的任意数据类型,多个元素之间通过逗号分割。
??????????? 例如:
??????????????? ["锄禾日当午","清明上河图",2,5,8,0]

??? 对象和数组之间可以互相嵌套。
??????? 案例,描述一个人
??????? {
??????????? "name":"小鸣",
??????????? "age":18,
??????????? "paoyou":["王柏","叶苏钦",{
??????????????? "name":"朱永庆",
??????????????? "info":"放烟花爆竹酷爱"
??????????? }]
??????? }

综合案例篇

Demo1. Gson.jar 解析JSON字符串的案例

package com.kkb;

import com.google.gson.Gson;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Demo1 {
    public static void main(String[] args) {
        String json = " {\n" +
                "            \"name\":\"小鸣\",\n" +
                "            \"age\":18,\n" +
                "            \"paoyou\":[\"王柏\",\"叶苏钦\",{\n" +
                "                \"name\":\"朱永庆\",\n" +
                "                \"info\":\"放烟花爆竹酷爱\"\n" +
                "            }]\n" +
                "        }";
        System.out.println(json);
        //1.创建json解析器对象g
        Gson g = new Gson();
        //2.通过fromJSON(),将JSON格式字符串转为java对象,转为HashMap集合
        HashMap data = g.fromJson(json, HashMap.class);
        System.out.println(data.get("name"));
        System.out.println(data.get("age"));
        //把paoyou转换为list对象
        List list = (List) data.get("paoyou");
        System.out.println(list.get(0));
        System.out.println(list.get(1));
        Map data2 = (Map) list.get(2);
        System.out.println(data2.get("name"));
    }
}


Demo2. Gson.jar 将Java中对象转换为JSON字符串的案例

?book类

package com.kkb;

import java.util.Objects;

public class Book {
    private String name;
    private String description;

    public Book(String name, String description) {
        this.name = name;
        this.description = description;
    }

    public Book() {
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", description='" + description + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Book book = (Book) o;
        return Objects.equals(name, book.name) && Objects.equals(description, book.description);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, description);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

?Demo2

package com.kkb;

import com.google.gson.Gson;

public class Demo2 {
    public static void main(String[] args) {
        Book book = new Book("金苹果","讲述了老农种植苹果的故事");
        System.out.println(book);
        //1. 创建解析器对象gson
        Gson g = new Gson();
        //2. 通过解析器的toJSON来得到JSON字符串
        String json = g.toJson(book);
        System.out.println(json);
    }
}


Demo3. fastJson.jar 将Java中对象转换为JSON字符串的案例

package com.kkb;

import com.alibaba.fastjson.JSON;

public class Demo3 {
    public static void main(String[] args) {
        Book book = new Book("金苹果","讲述了老农种植苹果的故事");
        System.out.println(book);
        //1. 通过解析器的toJSON类的静态方法toJSONString得到JSON字符串
        String json = JSON.toJSONString(book);
        System.out.println(json);
    }
}

Demo4. fastJson.jar 解析JSON字符串的案例

package com.kkb;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class Demo4 {
    public static void main(String[] args) {
        String json = "{\n" +
                "            \"name\":\"小鸣\",\n" +
                "            \"age\":18,\n" +
                "            \"paoyou\":[\"王柏\",\"叶苏钦\",{\n" +
                "                \"name\":\"朱永庆\",\n" +
                "                \"info\":\"放烟花爆竹酷爱\"\n" +
                "            }]\n" +
                "        }";

        //1. 通过解析器,将字符串转换为对象
        JSONObject map = JSON.parseObject(json);
        String name = map.getString("name");
        System.out.println(name);

        JSONArray list = map.getJSONArray("paoyou");
        System.out.println(list.getString(0));
        JSONObject map2 = list.getJSONObject(2);
        System.out.println(map2.getString("name"));
    }
}

?

Demo5. 结合上节课所学习的URL知识,下载网络api的天气查询JSON结果,进行解析

package com.kkb;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Scanner;

public class Demo5 {
    public static void main(String[] args)throws Exception {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入要查询天气的城市:");
        String city = input.nextLine();
        //URI编码的处理
        city = URLEncoder.encode(city, "UTF-8");

        String json = getJSON("https://itdage.cn/weather/weather?city=" + city);
        JSONObject map = JSON.parseObject(json);
        JSONObject resp = map.getJSONObject("resp");
        JSONObject map2 = resp.getJSONObject("forecast");
        JSONArray list = map2.getJSONArray("weather");
        for(int i=0;i<list.size();i++){
            JSONObject map3 = list.getJSONObject(i);
            System.out.println(map3.getString("date"));
            System.out.println(map3.getString("low")+" - "+map3.getString("high"));
            JSONObject day = map3.getJSONObject("day");
            JSONObject night = map3.getJSONObject("night");
            System.out.println("白天天气:"+day.getString("type")+","+day.getString("fengxiang")+day.getString("fengli"));
            System.out.println("夜间天气:"+night.getString("type")+","+night.getString("fengxiang")+night.getString("fengli"));
            System.out.println();
        }
    }


    public static String getJSON(String urlString) throws Exception {
        URL url = new URL(urlString);
        URLConnection conn = url.openConnection();
        InputStream is = conn.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
        String text = null;
        StringBuilder sb = new StringBuilder();
        while((text = br.readLine()) != null){
            sb.append(text);
        }
        br.close();
        return sb.toString();
    }
}

版本二?

package com.kkb;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;

public class Demo8 {
    public static void main(String[] args) throws Exception {
        //http://apis.juhe.cn/simpleWeather/query?city=%E5%A4%AA%E5%8E%9F&key=b2a9cb5db36467550fddbbf6f3c61e0f
        //1.准备一个URL的对象,来表示网址 http://apis.juhe.cn/simpleWeather/query?city=%E5%A4%AA%E5%8E%9F&key=b2a9cb5db36467550fddbbf6f3c61e0f
        System.out.println("欢迎使用龙仁开发的天气预报程序,请输入您要查询的城市");
        Scanner input = new Scanner(System.in);
        String city = input.nextLine();
        URL url = new URL("http://apis.juhe.cn/simpleWeather/query?key=b2a9cb5db36467550fddbbf6f3c61e0f&city="+city);
        //2.打开网络连接,得到连接对象
        URLConnection conn = url.openConnection();
        //3.通过连接对象获取输入输出流
        InputStream is =conn.getInputStream();
        BufferedReader br =new BufferedReader(new InputStreamReader(is,"UTF-8"));
        //4.通过输入流,加载内容
        String jsonString =br.readLine();
        JSONObject jsonObject = JSON.parseObject(jsonString);
        if (jsonObject.getIntValue("errit_code")==0){
            System.out.println("查询成功");
            JSONObject result =jsonObject.getJSONObject("result");
            JSONArray array =result.getJSONArray("future");
            System.out.println("未来五天的天气情况如下");
            for (int i = 0;i<array.size();i++){
                JSONObject w = array.getJSONObject(i);
                String date = w.getString("date");
                String temperature = w.getString("temperature");
                String weather = w.getString("weather");
                String direct = w.getString("direct");
                System.out.println(date);
                System.out.println("天气:"+weather+",温度区间:"+temperature+",风向:"+direct);
                System.out.println("-----------------");
            }
        }else {
            System.out.println("查询失败,"+jsonObject.getString("reason"));
        }
        //5.关闭流
        br.close();
    }
}

?

?

Demo6. URI编码的编码与解码?

package com.kkb;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

public class Demo6 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //1. 将南京两个字,转换为URI编码
        String text = URLEncoder.encode("南京", "UTF-8");
        System.out.println(text);

        //2. 将URI编码的南京,转换为中文
        String decode = URLDecoder.decode(text, "utf-8");
        System.out.println(decode);
    }
}

?

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 18:03:22  更:2022-04-18 18:03:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:38:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码