架构师之json-----------通过path查找指定数据

1.前言
如题。
2.代码.



import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.lijunnan.JsonTypeEnum;

/**
*
* @author 李俊南
*
*/
public class JsonUtil {
private static final Logger logger = Logger.getLogger(JsonUtil.class);

/**
* 获取object需要的json类型,只针对jsonobject.get的object
*
* @param object
* 需要判断的json对象
* @return object匹配的类型
*/
public static JsonTypeEnum getType(Object object) {
if (object instanceof String) {
return JsonTypeEnum.String;
} else if (StringUtils.isNumeric(object.toString())) {
return JsonTypeEnum.Number;
} else if (object instanceof JSONObject) {
return JsonTypeEnum.JSONObject;
} else if (object instanceof JSONArray) {
return JsonTypeEnum.jsonArray;
} else {
return JsonTypeEnum.Other;
}
}

/**
* 根据对应的path如A.b1.c1,获取最里层的json的String的值 jaonarray先不考虑
*
* @param json
* 需要解析的jsonobject
* @param path
* 格式为形如a.b.c.d
*
*
* @return 如果没找到或者异常则返回null,否则返回找到的对应值
*/
public static String getJsonValueByPath(String jsonObjectString, String path) {
try {
JSONObject json = JSONObject.parseObject(jsonObjectString);
logger.info("分析数据:"+jsonObjectString+"path:"+path);
if (StringUtils.isEmpty(path) || null == json) {
return null;
}
// 1.如果不包含.号,则是第一层
if (!path.contains(".")) {
return json.getString(path);
} else {
// 包含.号的,至少一层以上的层级,层层获取
String[] paths = StringUtils.split(path, ".");
JSONObject objectLast = json;
for (int i = 0; i < paths.length; i++) {
Object objectTemp = objectLast.get(paths[i]);
if(null==objectTemp){
return null;
}
JsonTypeEnum jsonType = getType(objectTemp);
if (jsonType == JsonTypeEnum.String) {
// 找到String,则返回
return (String) objectTemp;
} else if (jsonType == JsonTypeEnum.Number) {
return String.valueOf(objectTemp);
} else if (jsonType == JsonTypeEnum.JSONObject) {
// 没找到String ,继续往下找,jaonarray先不考虑
objectLast = (JSONObject) objectTemp;
continue;
}

}

}

} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return null;
}
}



public enum JsonTypeEnum {
String,
jsonArray,
JSONObject,
Number,
Other
}


3.注意事项。
json的jar包可以用net.json的官方jar替代ali的jar。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在交叉编译环境下编译 json-c 库,你需要进行以下步骤: 1. 准备交叉编译工具链:根据你的目标平台,获取相应的交叉编译工具链。这包括交叉编译器、交叉编译的库和头文件等。 2. 设置环境变量:将交叉编译工具链的路径添加到系统的环境变量中,以便构建过程可以找到正确的工具。 3. 获取 json-c 源代码:从 json-c 的官方仓库(https://github.com/json-c/json-c)下载最新的源代码包,或者使用 Git 克隆仓库。 4. 创建交叉编译目录:在源代码目录之外创建一个新的目录,用于进行交叉编译。这样可以保持源代码目录的干净和可重用性。 5. 配置交叉编译参数:进入交叉编译目录,并运行以下命令来配置 json-c 的构建过程: ``` <path_to_jsonc_source>/configure --host=<target_architecture> --prefix=<install_directory> ``` `<path_to_jsonc_source>` 是 json-c 源代码的路径,`<target_architecture>` 是目标平台的架构(如 arm-linux-gnueabihf),`<install_directory>` 是你希望安装 json-c 的路径。 6. 编译和安装:运行以下命令来编译和安装 json-c 库: ``` make make install ``` 7. 导入库:将编译好的 json-c 库和头文件复制到你的目标平台上,并在交叉编译环境中配置正确的搜索路径。 请注意,具体的步骤和命令可能会因你的目标平台和工具链而有所不同。在进行交叉编译时,请参考相关文档和交叉编译工具链的说明来调整上述步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值