繁体   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