您的位置:首页 > 游戏 > 游戏 > Jason文件解析

Jason文件解析

2024/12/23 15:19:21 来源:https://blog.csdn.net/dsq88163/article/details/141191165  浏览:    关键词:Jason文件解析

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com