如何过滤JSON数组

时间:2018-05-02 06:24:54

标签: java

我有一个动态JSON数组,我需要根据“isCalculatedField”过滤JSON:false。

[{
    "id": "CX.VOEFAIL.CREATEDT",
    "description": "Task Management - Voe Fail Review Create Date",
    "format": "STRING",
    "maxLength": 40,
    "modelPath": "Loan.CustomFields[(FieldName == 'CX.VOEFAIL.CREATEDT')].StringValue",
    "isCalculatedField": false
},
{
    "id": "CX.VOEFAIL.TASKCNT",
    "description": "Task Management - VOE Fail Review Task Count",
    "format": "INTEGER",
    "maxLength": 0,
    "modelPath": "Loan.CustomFields[(FieldName == 'CX.VOEFAIL.TASKCNT')].StringValue",
    "isCalculatedField": false
},
{
    "id": "CX.YEARS.AT.EMPLOYER",
    "description": "Years employed",
    "format": "DROPDOWNLIST",
    "maxLength": 0,
    "options": [
        "Yes"
    ],
    "modelPath": "Loan.CustomFields[(FieldName == 'CX.YEARS.AT.EMPLOYER')].StringValue",
    "isCalculatedField": true
},
{
    "id": "CX.YEARS.AT.RESIDENCE",
    "description": "Years at residence",
    "format": "DROPDOWNLIST",
    "maxLength": 0,
    "options": [
        "Yes"
    ],
    "modelPath": "Loan.CustomFields[(FieldName == 'CX.YEARS.AT.RESIDENCE')].StringValue",
    "isCalculatedField": true
}]

如何获取包含“isCalculatedField”的子JSON列表:false? 我在String中有这个JSON数据。

2 个答案:

答案 0 :(得分:0)

使用JSON-P

import java.io.StringReader;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonReader;

public class Playground {

    public static void main(String[] args) {
        String json = "[{\n"
                + "    \"id\": \"CX.VOEFAIL.CREATEDT\",\n"
                + "    \"description\": \"Task Management - Voe Fail Review Create Date\",\n"
                + "    \"format\": \"STRING\",\n"
                + "    \"maxLength\": 40,\n"
                + "    \"modelPath\": \"Loan.CustomFields[(FieldName == 'CX.VOEFAIL.CREATEDT')].StringValue\",\n"
                + "    \"isCalculatedField\": false\n"
                + "},\n"
                + "{\n"
                + "    \"id\": \"CX.VOEFAIL.TASKCNT\",\n"
                + "    \"description\": \"Task Management - VOE Fail Review Task Count\",\n"
                + "    \"format\": \"INTEGER\",\n"
                + "    \"maxLength\": 0,\n"
                + "    \"modelPath\": \"Loan.CustomFields[(FieldName == 'CX.VOEFAIL.TASKCNT')].StringValue\",\n"
                + "    \"isCalculatedField\": false\n"
                + "},\n"
                + "{\n"
                + "    \"id\": \"CX.YEARS.AT.EMPLOYER\",\n"
                + "    \"description\": \"Years employed\",\n"
                + "    \"format\": \"DROPDOWNLIST\",\n"
                + "    \"maxLength\": 0,\n"
                + "    \"options\": [\n"
                + "        \"Yes\"\n"
                + "    ],\n"
                + "    \"modelPath\": \"Loan.CustomFields[(FieldName == 'CX.YEARS.AT.EMPLOYER')].StringValue\",\n"
                + "    \"isCalculatedField\": true\n"
                + "},\n"
                + "{\n"
                + "    \"id\": \"CX.YEARS.AT.RESIDENCE\",\n"
                + "    \"description\": \"Years at residence\",\n"
                + "    \"format\": \"DROPDOWNLIST\",\n"
                + "    \"maxLength\": 0,\n"
                + "    \"options\": [\n"
                + "        \"Yes\"\n"
                + "    ],\n"
                + "    \"modelPath\": \"Loan.CustomFields[(FieldName == 'CX.YEARS.AT.RESIDENCE')].StringValue\",\n"
                + "    \"isCalculatedField\": true\n"
                + "}]";

        JsonReader reader = Json.createReader(new StringReader(json));
        JsonArray array = reader.readArray();
        for (int i = 0; i < array.size(); i++) {
            JsonObject obj = array.getJsonObject(i);
            if (!obj.getBoolean("isCalculatedField")) {
                System.out.println(obj.toString() + " is not calculated");
            }
        }
    }
}

输出:

{"id":"CX.VOEFAIL.CREATEDT","description":"Task Management - Voe Fail Review Create Date","format":"STRING","maxLength":40,"modelPath":"Loan.CustomFields[(FieldName == 'CX.VOEFAIL.CREATEDT')].StringValue","isCalculatedField":false} is not calculated
{"id":"CX.VOEFAIL.TASKCNT","description":"Task Management - VOE Fail Review Task Count","format":"INTEGER","maxLength":0,"modelPath":"Loan.CustomFields[(FieldName == 'CX.VOEFAIL.TASKCNT')].StringValue","isCalculatedField":false} is not calculated

答案 1 :(得分:0)

您可以使用DSM库。通过使用它,您可以在读取JSON数据时过滤JSON。

您将定义一个包含映射定义的YAML文件

映射文件:

result:
  type: array     # result is array
  path: /
  filter: self.data.isCalculatedField  # filter by isCalculatedField
  fields:
    id:
    description:
    modelPath:
    isCalculatedField: boolean
    format:

使用DSM过滤数据。

DSM dsm=new DSMBuilder(new File("path/to/config.yaml")).create();
Object object=dsm.toObject(new File("path/to/data.json");

这是结果:

[ {
  "id" : "CX.YEARS.AT.EMPLOYER",
  "description" : "Years employed",
  "format" : "DROPDOWNLIST",
  "modelPath" : "Loan.CustomFields[(FieldName == 'CX.YEARS.AT.EMPLOYER')].StringValue",
  "isCalculatedField" : true
}, {
  "id" : "CX.YEARS.AT.RESIDENCE",
  "description" : "Years at residence",
  "format" : "DROPDOWNLIST",
  "modelPath" : "Loan.CustomFields[(FieldName == 'CX.YEARS.AT.RESIDENCE')].StringValue",
  "isCalculatedField" : true
}, {
  "id" : "CX.YEARS.AT.RESIDENCE",
  "description" : "Years at residence",
  "format" : "DROPDOWNLIST",
  "modelPath" : "Loan.CustomFields[(FieldName == 'CX.YEARS.AT.RESIDENCE')].StringValue",
  "isCalculatedField" : true
} ]