簡體   English   中英

如何在 java 中獲取 json 數組的長度

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM