gpt4 book ai didi

java - ESQL 中的动态 JSON 键/值对生成

转载 作者:搜寻专家 更新时间:2023-10-31 20:24:53 26 4
gpt4 key购买 nike

如何将从外部系统检索到的 JSON 响应转换为 ESQL 中有意义的数据(键/值对)?

检索到的 JSON:

{
"data": [
{
"name": "application.info.header",
"value": "headerValue"
},
{
"name": "entity.statistics.name.fullName",
"value": "fullNameValue"
},
{
"name": "application.info.matter",
"value": "matterValue"
},
{
"name": "entity.statistics.skill",
"value": "skillValue"
}
]
}

在哪里,

  • name ~ JSON 层次结构(最后一个属性是键)

  • value ~ key 的值

预期的 JSON:

{
"data": {
"application": {
"info": {
"header": "headerValue",
"matter": "matterValue"
}
},
"entity": {
"statistics": {
"name": {
"fullName": "fullNameValue"
},
"skill": "skillValue"
}
}
}
}

不用说,这可以通过 Split 方法在 Java 中轻松实现 - 我正在寻找合适的 method在 ESQL 中。

当前 ESQL 模块:

CREATE COMPUTE MODULE getDetails_prepareResponse
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
DECLARE data REFERENCE TO InputRoot.JSON.Data.data.Item[1];
SET OutputRoot.JSON.Data = InputRoot.JSON.Data;
SET OutputRoot.JSON.Data.data = NULL;

WHILE LASTMOVE(data) DO
DECLARE keyA CHARACTER SUBSTRING(data.name BEFORE '.');
DECLARE name CHARACTER SUBSTRING(data.name AFTER '.');
DECLARE keyB CHARACTER SUBSTRING(name BEFORE '.');
DECLARE key CHARACTER SUBSTRING(name AFTER '.');
CREATE LASTCHILD OF OutputRoot.JSON.Data.data.{EVAL('keyA')}.{EVAL('keyB')}
NAME key VALUE data.value;
MOVE data NEXTSIBLING;
END WHILE;

RETURN TRUE;
END;
END MODULE;

目前这是通过 ESQL 中的 SUBSTRING 方法处理的(仅限 3 个级别),但现在 JSON 级别是根据要求动态的(不限制键/值对)。

最佳答案

您可以实现自己的程序来拆分字符串。以这个答案为例。

ESQL for splitting a string into mulitple values

该方法将 Delim 上的 S 拆分为 Env 中的数组 (Environment.Split.Array[]),并在重新填充之前移除 Environment.Split。

关于java - ESQL 中的动态 JSON 键/值对生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55618355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com