java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java解析json数组

java解析json数组方式

作者:阿懵

这篇文章主要介绍了java解析json数组方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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");

总结

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

您可能感兴趣的文章:
阅读全文