[英]How to get the Length of a json array in java
我正在处理一项要求,我需要在整个 json 中获得低于 json 的长度和过滤器 object 的长度
附上 json 以供参考。
{
"employeeId": "41825",
"userId": "tawright",
"sourceSystem": "Visibility",
"loginId": "nudayaku",
"groupBy": "order",
"isPretty": false,
"limit": 10,
"offset": 0,
"sortBy": "so_date",
"sortOrder": "desc",
"filters": [{
"name": "type",
"value": "POS",
"op": "eq"
}],
"srpGoalHeaderId": 3069181,
"srpGoalQuotaId": 1750558,
"category": "PRD & SVC|AG",
"goalSheet": "2020 CS020 28-Jul-2019 to 25-Jul-2020",
"loggedInUser": "nudayaku",
"requestedScreen": "orderSearch.g2c"
}
有人可以帮助我如何获得此 JSon 中涉及的过滤器的长度。
我在解析 JSOn 时收到以下错误
org.json.simple.JSONArray 无法转换为 org.json.JSONArray
import java.io.FileOutputStream;
import java.io.Serializable;
import java.lang.reflect.Array;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
import java.sql.Timestamp;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.json.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.cisco.export.utils.SFDbConnection;
import com.fasterxml.jackson.core.JsonParser;
//Assign value from Input Export JSon
JSONObject json = getJSONObject(getFilters());
String employeeId = (String) json.get("employeeId");
Long planId = (Long) json.get("planId");
Long srpGoalHeaderId = (Long) json.get("srpGoalHeaderId");
Long allocationId = (Long) json.get("allocationId");
String nodeName = (String) json.get("nodeName");
String erpPosFlag = (String) json.get("erpPosFlag");
Long soNumber = (Long) json.get("soNumber");
ObjectMapper mapper = new ObjectMapper();
JSONArray filters = (JSONArray) json.get("filters");
System.out.println("filters" +filters);
错误日志:
Exception is java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.JSONArray java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.JSONArray
谢谢,尼基尔
您正在导入 JSONArray 如下(来自不同的库)
import org.json.JSONArray;
从 json 导入它也很简单
import org.json.simple.JSONArray;
希望这可以帮助 !!
尝试将其映射到 object 中,您可以很容易地获得过滤器长度。 例如
var object = {
"employeeId": "41825",
"userId": "tawright",
"sourceSystem": "Visibility",
"loginId": "nudayaku",
"groupBy": "order",
"isPretty": false,
"limit": 10,
"offset": 0,
"sortBy": "so_date",
"sortOrder": "desc",
"filters": [{
"name": "type",
"value": "POS",
"op": "eq"
}],
"srpGoalHeaderId": 3069181,
"srpGoalQuotaId": 1750558,
"category": "PRD & SVC|AG",
"goalSheet": "2020 CS020 28-Jul-2019 to 25-Jul-2020",
"loggedInUser": "nudayaku",
"requestedScreen": "orderSearch.g2c"
}
console.log('filters length',object.filters.length);
将 json 解析为 object 使用 JsonParser 例如
JSONParser parse = new JSONParser();
Object EmployeeObject = parse.parse(yourjsonobject);
console.log(EmployeeObject.filters.length);
“过滤器” jsonArray 的长度实际上是 1,因为在方括号 [] 中,您有 {},它被视为数组中的 1 个元素。
假设您想获取 json 数组中 json object 的大小,即
{“名称”:“类型”,“值”:“POS”,“op”:“eq”}
您需要遍历 object 以获得大小
您正在混合两个不兼容的 json 处理库,因此出现错误。
从您的代码段:
import org.json.JSONArray;
import org.json.simple.JSONObject;
显然是错误的:
org.json.simple
由http://code.google.com/p/json-simple/提供
org.json
被其他一些库支持,例如这个
最好的办法是打开相应的类并检查它们实际属于哪个 jar (例如,在 IntelliJ 中,您只需按Alt + F1
即可)。
所以坚持一个图书馆,它应该可以工作。
您可以使用您正在创建的同一个ObjectMapper
来获取filters
列表,而不是混合两个确实是错误的不同库操作
ObjectMapper mapper = new ObjectMapper();
使用上面的mapper
将您的 json 转换为Map<String, Object>
,然后您可以处理整个 json。 你可以做这样的事情来从你的 json 中取出列表。
Map<String, Object> map = mapper.readValue(json, Map.class);
if(map.containsKey("filters")) {
List<Object> filters = (List) map.get("filters");
System.out.println(filters);
System.out.println(filters.size());
}
这个片段打印出来:
[{name=type, value=POS, op=eq}]
1
我以myJson
-> My Json 的方式解决它,其中存在一个数组
fieldPath
-> 数组的路径
import com.jayway.jsonpath.JsonPath;
import org.json.JSONArray;
import org.json.simple.JSONObject;
JSONObject myJson;
public long CountFields(String fieldPath) {
String onlyMyArray=JsonPath.parse(myJson).read(fieldPath).toString();
JSONArray jsonArray = new JSONArray(onlyMyArray);
return jsonArray.length();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.