python读取json如下,很便捷
#!/usr/bin/env python
#coding=utf-8
import json
fin =file(r"D:\ECMSDE\GTRECM\JavaExecutor\JavaEnvCfg\deployParameters.json","a+")
#content = fin.read()
s=json.load(fin)
print s["environment"]["instances"]["vms"][0]["eip"]
控制台输出
C:\Python27\python.exe C:/Users/s00424093/PycharmProjects/pycharm/day/resource/Dependency/loadjson.py
100.115.143.159
Process finished with exit code 0
但是Java的很繁琐,所以实现了一个函数类似用python这种python去读取jsonvalue值的
java用 path的方式解析JSON
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import java.io.*;
import java.util.Iterator;
import java.util.Scanner;
public class JsonFile {
//读取json文件
public static JSONObject getObj(String FilePath){
JSONObject jsonObj = null;
new Log("JsonFile.class");
if(FilePath == null){
System.out.println("json文件路径为空,请确认传入路径是否正确。");
Log.logger.error("json文件路径为空,请确认传入路径是否正确。");
return null;
}else if(new File(FilePath).exists() == false){
System.out.println("json文件不存在,请确认传入路径是否正确。");
Log.logger.error("json文件不存在,请确认传入路径是否正确。");
return null;
}
String data= new JsonFile().readFile(FilePath).toString();
jsonObj = JSONObject.fromObject(data);
return jsonObj;
}
public StringBuilder readFile(String FilePath){
StringBuilder buffer = new StringBuilder();
File file = new File(FilePath);
Scanner scanner = null;
try {
scanner = new Scanner(file, "utf-8");
while (scanner.hasNextLine()) {
buffer.append(scanner.nextLine());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (scanner != null) {
scanner.close();
}
}
return buffer;
}
public static String getDeepValue(String FilePath,String JsonPython){
//用[\"instances\"][\"vms\",\"vms\"][0][\"eip\"]一样取json的值,默认初始以jsonobject开始不是jsonobject
//校验Jsonpath
if (!verifyForms(JsonPython)){
return null;
}
JSONObject jsonObject = getObj(FilePath);
JSONArray jsonArray = null ;
if(null==jsonObject){
return null;
}
//元素属性分类
String[] elements = JsonPython.substring(1,JsonPython.length()-1).split("]\\[");
String[][] elementsWithType = new String[elements.length][2];
for(int i=0;i<elements.length;i++) {
String e = elements[i];
if (e.matches("^\"[^\"]+[\"$]")) {
//元素为字符串,则为普通属性
elementsWithType[i][0] = e.substring(1, e.length() - 1);
elementsWithType[i][1] = "string";
} else if (e.matches("\\d+")) {
//元素为数字说明为数组
elementsWithType[i][0] = e;
elementsWithType[i][1] = "number";
}
}
//取值
for(int i=0;i<elements.length;i++) {
String e = elementsWithType[i][0];
String type = elementsWithType[i][1];
String nextType = null;
if (i < elements.length - 1) {
nextType = elementsWithType[i + 1][1];
}
if ("string".equals(type)) {
//元素为字符串,则为普通属性
if (jsonArray != null) {
Log.logger.error("jsonPtah格式错误:json --->JsonArray `s element must be a number ,not string:" + e);
return null;
}
if (!jsonObject.has(e)) {
Log.logger.error("jsonPtah格式错误:json --->don`t have the key : " + e);
return null;
}
if ("string".equals(nextType)) {
jsonObject = jsonObject.getJSONObject(e);
jsonArray = null;
} else if ("number".equals(nextType)) {
jsonArray = jsonObject.getJSONArray(e);
jsonObject = null;
} else if(null == nextType){
Object o =jsonObject.get(e);
return o.toString();
}
} else if ("number".equals(type)) {
//元素为数字说明为数组
int n = Integer.parseInt(e);
if (jsonObject != null) {
Log.logger.error("jsonPtah格式错误:json --->JsonObject `s element must be a string ,not number:" + e);
return null;
}
if (jsonArray.size() <= n) {
Log.logger.error("jsonPtah格式错误:json --->JsonArray`s index : " + n + " out of range : " + jsonArray.size());
return null;
}
if ("string".equals(nextType)) {
jsonObject = jsonArray.getJSONObject(n);
jsonArray = null;
} else if ("number".equals(nextType)) {
jsonArray = jsonArray.getJSONArray(n);
jsonObject = null;
} else if(null == nextType){
Object o =jsonArray.get(n);
return o.toString();
}
}
}
return jsonObject.toString();
}
private static boolean verifyForms(String JsonPython){
new Log("JsonFile.class");
//参数正确格式"[\"instances\"][\"vms\"][0][\"eip\"]"
if("".equals(JsonPython)||null==JsonPython){
Log.logger.error("jsonPtah格式错误:\""+JsonPython+"\" --->值为空或null");
return false;
}
if(!JsonPython.startsWith("[")||!JsonPython.endsWith("]")){
Log.logger.error("jsonPtah格式错误:\"" + JsonPython + "\" --->未以'['开始或未以'['结束");
return false;
}
String[] elements =JsonPython.substring(1,JsonPython.length()-1).split("]\\[");
for (String e:elements) {
boolean isString=e.matches("^\"[^\"]+[\"$]");//必须以"开始和结束中间字符不能有"
boolean isNumber=e.matches("\\d+");
if(!isString&&!isNumber){
Log.logger.error("jsonPtah格式错误:\"" + JsonPython + "\" --->[...]内元素值非法");
return false;
}
}
return true;
}
public static void main(String[] args){
String r = getDeepValue("D:/ECMSDE/GTRECM/JavaExecutor/JavaEnvCfg/deployParameters.json","[\"environment\"][\"instances\"][\"vms\"][0][0][\"status\"]");
System.out.println(r);
}
控制台输出