繁体   English   中英

从嵌套的json数据替换数据

[英]Replacing data from nested json data

我正在使用json数据创建表单。 我有一个json数据如下。

每个主要对象都有一个唯一的值作为key

从第一个主要对象开始,我需要用其他一些值替换data对象,它的唯一键是"key": "ticket_type" 同样,我必须替换每个对象的某些值。

{
    "components": [{
        "components": [{
            "columns": [{
                "pull": 0,
                "components": [{
                    "authenticate": false,
                    "data": {
                        "values": [{
                            "label": "Bug",
                            "value": 1
                        }, {
                            "label": "Feature",
                            "value": 2
                        }, {
                            "label": "Support",
                            "value": 3
                        }, {
                            "label": "Service",
                            "value": 4
                        }]
                    },
                    "hidden": false,
                    "defaultValue": "Bug",
                    "label": "Ticket Type",
                    "autofocus": false,
                    "type": "select",
                    "key": "ticket_type"
                }],
                "offset": 0,
                "width": 4,
                "push": 0
            }],
            "type": "columns",
            "hideLabel": true
        }, {
            "input": false,
            "columns": [{
                "pull": 0,
                "components": [{
                    "authenticate": false,
                    "data": {
                        "values": [{
                            "label": "Low",
                            "value": "low"
                        }, {
                            "label": "Normal",
                            "value": "normal"
                        }, {
                            "label": "High",
                            "value": "high"
                        }, {
                            "label": "Urgent",
                            "value": "urgent"
                        }, {
                            "label": "Immediate",
                            "value": "immediate"
                        }]
                    },
                    "hidden": false,
                    "defaultValue": "normal",
                    "label": "Priority",
                    "type": "select",
                    "labelPosition": "left-right",
                    "unique": false,
                    "persistent": true,
                    "key": "ticket_priority"
                }, {
                    "label": "Parent Task",
                    "autofocus": false,
                    "type": "textfield",
                    "unique": false,
                    "inputType": "text",
                    "key": "parent_task"
                }],
                "offset": 0,
                "width": 4,
                "push": 0
            }, {
                "pull": 0,
                "components": [{
                    "hidden": false,
                    "labelPosition": "left-right",
                    "defaultValue": "",
                    "labelMargin": 3,
                    "customClass": "formio-textfield",
                    "disabled": true,
                    "labelWidth": 30,
                    "block": false,
                    "label": "Device Name",
                    "type": "textfield",
                    "key": 1
                }
                }],
                "offset": 0,
                "width": 6,
                "push": 2
            }],
            "tableView": false,
            "clearOnHide": false,
            "label": "Columns",
            "type": "columns",
            "key": "panelColumns3",
            "hideLabel": true
        }, {
            "input": true,
            "action": "submit",
            "theme": "primary",
            "label": "Create",
            "autofocus": false,
            "type": "button",
            "disableOnInvalid": false,
            "key": "panelCreate"
        }],
        "title": "New Ticket",
        "type": "panel"
    }]
}

如何在Java中执行此操作? 目前正在

JSONArray getArray = jsonData.getJSONArray("components");
JSONObject object1 = getArray.getJSONObject(0);
JSONArray array1 = object1.getJSONArray("components");
array1.getJSONObject(0)
.getJSONArray("columns")
.getJSONObject(0)
.getJSONArray("components")
.getJSONObject(0)
.put("data", jsonTrackerObj);

但是,当我在这些json数据之间添加任何对象时,上述代码将无法工作。 有什么解决办法吗? 谢谢。

您可以使用JsonPath之类的库来简化对JSON结构的访问/修改。

这样,您可以使用声明式(因此独立于排序/嵌套问题)JsonPath表达式轻松访问某些结构,如下所示:

DocumentContext context = JsonPath.parse(json);

// to get all objects that have 'key' = 'ticket_type'
JSONArray array = context.read("$..[?(@.key == 'ticket_type')]"); 

您还可以修改json结构,如下所示:

DocumentContext context = JsonPath.parse(json);
JSONObject newValue = new JSONObject().appendField("sample", "field");

// to set 'data' field on all objects that have 'key' = 'ticket_type'
context.set("$..[?(@.key == 'ticket_type')].data", newValue);

PS。 您可能想要更改JSON Provider以适合您当前的JSON Provider 此处已对此进行了详细说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM