[英]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.