1.先从指定路径的文件里读取jason字符。
String fileStr = readFileString(filePath); ///filePath /tranfs/CloudEngine/1008000035/tne.json
2. 把从文件里读取的string生成 JSONObject对象,然后再通过jason获取对应的key和值
JSONObject paramJsonObj = new JSONObject(fileStr);
3.数据解析
JSONObject的数据是用 { } 来表示的,
例如:
{
"id":"1",
"courseID":"化学",
"title":"滴定实验",
"content":"下周二实验楼201必须完成"
}
JSONObject | 表示一个JSON对象,包含一系列无序的键值对 | 用于解析JSON对象数据,获取其中的值 |
JSONArray | 表示一个JSON数组,包含一系列JSON对象或值 | 用于解析JSON数组数据,遍历数组中的每个对象 |
而JSONArray,顾名思义是由JSONObject构成的数组,用 [ { } , { } , … , { } ] 来表示
例如:
[
{
"id":"1",
"courseID":"数学",
"title":"一加一等于几"
},
{
"id":"2",
"courseID":"语文",
"title":"请背诵全文"
}
]
表示了包含2个JSONObject的JSONArray。
可以看到一个很明显的区别,一个最外面用的是 { } ,一个最外面用的是 [ ] ;
3.1. 如何从字符串jsonString获得JSONObject对象和JSONArray对象
/*json字符串最外层是大括号时:*/
JSONObject jsonObject = new JSONObject(jsonStr);
/*json字符串最外层是方括号时:*/
JSONArray jsonArray = new JSONArray(jsonStr);
3.2. 如何从JSONArray中获得JSONObject对象
遇到方括号时,就要先获取JSONArray,然后再循环遍历出JSONObject
大家可以把JSONArray当成一般的数组来对待,只是获取的数据内数据的方法不一样。
for (int i = 0; i < jsonArray.length(); i++) {
if( !jsonArray.isNull(j)){
JSONObject jsonObject = jsonArray.getJSONObject(i);
}
3.3.数据解析:
在Java中,JSONObject类用于表示一个JSON对象,并提供了多种方法来获取其键对应的值。
获取值的方法
opt(String key):
根据键获取值,如果键不存在,则返回null。
推荐使用,因为不会抛出异常。
JSONObject jsonObject = new JSONObject("{\"name\":\"John\", \"age\":30}");
Object value = jsonObject.opt("name"); // 返回 "John"
Object missingValue = jsonObject.opt("nonexistent"); // 返回 null
get(String key):
根据键获取值,如果键不存在,则抛出JSONException。
JSONObject jsonObject = new JSONObject("{\"name\":\"John\", \"age\":30}");
Object value = jsonObject.get("name"); // 返回 "John"
Object missingValue = jsonObject.get("nonexistent"); // 抛出 JSONException
根据值的类型获取
optString(String key):
根据键获取字符串值,如果键不存在或值不是字符串,则返回空字符串或null。
String name = jsonObject.optString("name"); // 返回 "John"
String missingName = jsonObject.optString("nonexistent"); // 返回 ""
optInt(String key):
根据键获取整数值,如果键不存在或值不是整数,则返回0或指定的默认值。
int age = jsonObject.optInt("age"); // 返回 30
int missingAge = jsonObject.optInt("nonexistent", -1); // 返回 -1
optBoolean(String key):
根据键获取布尔值,如果键不存在或值不是布尔值,则返回false或指定的默认值。
boolean isMarried = jsonObject.optBoolean("married"); // 返回 true 或 false
boolean missingMarried = jsonObject.optBoolean("nonexistent", true); // 返回 true
optJSONObject(String key):
根据键获取JSONObject对象,如果键不存在或值不是JSONObject,则返回null。
JSONObject address = jsonObject.optJSONObject("address"); // 返回一个 JSONObject 对象或 null
optJSONArray(String key):
根据键获取JSONArray对象,如果键不存在或值不是JSONArray,则返回null。
private String readFileString(String filePath) {
String fileString = "";
File file = new File(filePath);
if(file.exists() && file.canRead()) {
try(InputStreamReader in = new InputStreamReader(new FileInputStream(file));
BufferedReader bf = new BufferedReader(in)) {
StringBuffer buffer = new StringBuffer();
String line = null;
while (null != (line = bf.readLine())) {
buffer.append(line);
}
fileString = buffer.toString();
} catch (Exception e) {
Slog.e(TAG, "readFileString Error!" + e);
}
}else {
Slog.d(TAG,"readFileString : File not exists or File can't Read ");
}
return fileString;
}
JSONObject paramJsonObj = new JSONObject(fileStr);
if (paramJsonObj.has(CONFIG_ENABLE)) {
mEnable = paramJsonObj.optBoolean(CONFIG_ENABLE);
}
if (paramJsonObj.has(CONFIG_CONFIG)) {
JSONArray arr = paramJsonObj.optJSONArray(CONFIG_CONFIG);
if (arr != null && arr.length() > 0) {
mConfigInfos = new ArrayMap<>();
//遍历JSON数组得到其中的city数据
for (int i = 0; i < arr.length()-1; i++) {
JSONObject jObj = arr.getJSONObject(i);
logD("jObj = " + jObj );
String metric = jObj.optString(CONFIG_METRIC);
logD("metric = " + metric );
ConfigInfo info = new ConfigInfo(metric);
info.mEnable = jObj.optBoolean(CONFIG_ENABLE);
logD("mEnable = " + info.mEnable );
info.mSamplingInterval = (jObj.optLong(CONFIG_SAMPLING_INTERVAL));
logD("mSamplingInterval = " + info.mSamplingInterval );
if(TextUtils.equals(metric,"startup")){
JSONArray jthld = jObj.getJSONArray(CONFIG_DEFAULT_THRESHOLD);
if (jthld != null && jthld.length() > 0){
for (int k = 0; k < jthld.length(); k++) {
JSONObject threshold= jthld.getJSONObject(i);
info.mDefaultThreshold.put(CONFIG_COLD, threshold.optLong(CONFIG_COLD));
info.mDefaultThreshold.put(CONFIG_HOT, threshold.optLong(CONFIG_HOT));
logD(" CONFIG_COLD = " + threshold.optLong(CONFIG_COLD));
}
}
}else if(jObj.has(CONFIG_DEFAULT_THRESHOLD)){
info.mDefaultThreshold.put(CONFIG_DEFAULT_THRESHOLD, jObj.optLong(CONFIG_DEFAULT_THRESHOLD));
logD(" CONFIG_DEFAULT_THRESHOLD) = " + jObj.optLong(CONFIG_DEFAULT_THRESHOLD));
}