目录
  • java解析json数组
    • 最简单的json数组
    • 如何解析这个json数组
  • java中JSON数据的读取和解析
    • 配置fastJson
    • 构建工具类(方便多次调用时重复使用)
    • 调用工具类读取数据
    • 读取对象类型字段
    • 读取字符串类型
    • 读取整数类型
    • 整体解析
  • 总结

    java解析json数组

    最简单的json数组

    [
        {
            "sisid": 2015111234,
            "sitid": 20001
        },
        {
            "sisid": 2015112312,
            "sitid": 20003
        }
    ]

    其对应的内容为:

    为什么我说这是最简单的json数组呢?因为这个json数组连json对象名都省略了。

    如果加上对象名是这样的:

    {
        "msg": [
            {
                "sisid": 2015111234,
                "sitid": 20001
            },
            {
                "sisid": 2015112312,
                "sitid": 20003
            }
        ]
    }

    我看json数组结构是这样看的:最外面一层是一个方括号表示这是一个json数组,内部是连个花括号表示包含两个json对象(且注意到花括号外面没有对象名),且这两个对象分别是这个json数组的第0项和第1项。

    如何解析这个json数组

            //解析json数组
    		for (int i = 0; i < json.size(); i++) {
    			JsonObject signin = (JsonObject) json.get(i);
    			JsonElement int_sisid = signin.get("sisid");
    			JsonElement int_sitid = signin.get("sitid");
                //获取sisid
    			String SISID = String.valueOf(int_sisid);
                //获取sitid
    			String SITID = String.valueOf(int_sitid);
    		}

    注:我使用的是Gson的jar包

    for循环获取数组中个每个对象元素JsonObject,再通过get(“属性名”)获取这个对象中的所对应的元素JsonElement,最后转化为String类型。

    java中JSON数据的读取和解析

    在做springboot项目时用到了json文件读取和解析,所以在这里记录一下学习过程中总结的一些点,希望对大家有帮助~

    配置fastJson

    <!--引入fastjson依赖-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.35</version>
    </dependency>

    构建工具类(方便多次调用时重复使用)

    public static JSONObject readJsonFile(String filename){
            String jsonString = "";
            File jsonFile = new File(filename);
            try {
                FileReader fileReader = new FileReader(jsonFile);
                Reader reader = new InputStreamReader(new FileInputStream(jsonFile),"utf-8");
                int ch = 0;
                StringBuffer stringBuffer = new StringBuffer();
                while ((ch = reader.read()) != -1){
                    stringBuffer.append((char) ch);
                }
                fileReader.close();
                reader.close();
                jsonString = stringBuffer.toString();
            } catch (FileNotFoundException e){
                JSONObject notFoundJson = new JSONObject();
                notFoundJson.put("code",Code.GET_ERR);
                notFoundJson.put("msg","该地区GeoJson文件不存在!");
                return notFoundJson;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return JSONObject.parseObject(jsonString);
        }

    json文件示例(以geojson为例,数据结构比较复杂,只是层次比较多)

    {
        "type": "FeatureCollection",
        "features": [
            {
                "type": "Feature",
                "properties": {
                    "adcode": 110101,
                    "name": "东城区",
                    "center": [
                        116.418757,
                        39.917544
                    ],
                    "centroid": [
                        116.416739,
                        39.912912
                    ],
                    "childrenNum": 0,
                    "level": "district",
                    "acroutes": [
                        100000,
                        110000
                    ],
                    "parent": {
                        "adcode": 110000
                    }
                },
                "geometry": {
                    "type": "MultiPolygon",
                    "coordinates": [
                        [
                            [
                                [
                                    116.387664,
                                    39.960923
                                ],
                                [
                                    116.38948,
                                    39.961038
                                ],
                                [
                                    116.389506,
                                    39.963147
                                ],
                                [
                                    116.396959,
                                    39.963204
                                ]
                            ]
                        ]
                    ]
                }
            }
        ]
    }

    调用工具类读取数据

    String filePath = "文件路径";
    // 读取json文件
    JSONObject jsonObejct = readJsonFile(filePath);

    读取json对象中的"features"字段内容,是数组类型的,采用以下方式:

    // 方式一
    JSONArray featureArray = JSON.parseArray(jsonObejct.get("features").toString());
    // 方式二
    JSONArray featureArray = jsonObejct.getJSONArray("features");

    读取对象类型字段

    // 方式一
    JSONObject propertiesObject = JSONObject.parseObject(regionObject.getString("properties"));
    // 方式二
    JSONObject propertiesObject = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("properties");

    读取字符串类型

    // 方式一
    String type = jsonObejct.get("type").toString();
    // 方式二
    String type = jsonObejct.getString("type");

    读取整数类型

    // 方式一
    String type = jsonObejct.get("type").toString();
    // 方式二
    String type = jsonObejct.getString("type");

    整体解析

    String filePath = "文件地址/文件名.json";
    JSONObject jsonObejct = ReadJsonUtils.readJsonFile(filePath);
    ​
    // 方式一(很复杂,语句分开,但是结构清晰)
    // 读取json文件的features字段,并转换为json数组
    JSONArray featureArray = JSON.parseArray(jsonObejct.get("features").toString());
    // 读取数组第一个元素,为地区对象
    JSONObject regionObject = JSONObject.parseObject(featureArray.get(0).toString());
    // 读取地区对象中的参数对象
    JSONObject propertiesObject = JSONObject.parseObject(regionObject.getString("properties"));
    // 读取参数对象的名称
    String name = propertiesObject.getString("name");
    // 读取参数对象的地区代码
    int adcode = propertiesObject.getIntValue("adcode");
    // 读取地区对象的几何对象
    JSONObject geometryObject = JSONObject.parseObject(regionObject.get("geometry").toString());
    // 读取几何字段中的坐标数组
    JSONArray coordinates = JSONObject.parseArray(geometryObject.get("coordinates").toString());
    // 读取几何对象中的类型名称
    String type = geometryObject.getString("type");
    ​
    // 方式二(无需每次重新转换类型,一行搞定)
    String name = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("properties").getString("name");
    String type = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("geometry").getString("type");
    JSONArray coordinates = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("geometry").getJSONArray("coordinates");

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持本网站。

    您可能感兴趣的文章:

    • Java 从json提取数组并转换为list的操作方法
    • Java如何将String转换成json对象或json数组
    • Java获取json数组对象的实例讲解
    • java提取json中某个数组的所有值方法
    • java实现二维数组转json的方法示例
    • 使用Java进行Json数据的解析(对象数组的相互嵌套)