Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将json数组转换为字符列表esql_Arrays_Json_Ibm Integration Bus_Cardinality_Extended Sql - Fatal编程技术网

Arrays 将json数组转换为字符列表esql

Arrays 将json数组转换为字符列表esql,arrays,json,ibm-integration-bus,cardinality,extended-sql,Arrays,Json,Ibm Integration Bus,Cardinality,Extended Sql,我有以下json语法 { "PRINTER": "P123", "ID_INPUT": "111046", "IDCOUNT": 3, "TIME": "", "IDLIST": [{ID_IN": "111046"},{"ID_IN": "111047"}, {

我有以下json语法

{
"PRINTER": "P123", 
"ID_INPUT": "111046", 
"IDCOUNT": 3, 
"TIME": "",
"IDLIST": [{ID_IN": "111046"},{"ID_IN": "111047"}, {"ID_IN": "111048"}]
}
我的目标是迭代IDLIST并在esql中创建一个类似“111046;111047;111048”的字符串。但是我在处理json时遇到了问题。我试过:

DECLARE c       INTEGER;   -- cardinality
DECLARE i       INTEGER 0; -- index
DECLARE idlist  CHARACTER '';

-- find cardinality
SET c = CARDINALITY(InputRoot.JSON.Data.IDLIST[]); -- Q1
            
-- iterate over IDLIST
WHILE i < c DO
  -- build new data structure
  SET idlist = idlist || InputRoot.JSON.Data.IDLIST[i] || ';'; -- Q2
  SET i = i + 1;
END WHILE;  
声明c整数;--基数
声明i整数0;--指数
声明空闲字符“”;
--找到基数
SET c=CARDINALITY(InputRoot.JSON.Data.IDLIST[]);--Q1
--在IDLIST上迭代
当我做的时候
--建立新的数据结构
SET idlist=idlist | | InputRoot.JSON.Data.idlist[i]| |‘’;--问题2
设置i=i+1;
结束时;
  • 问题1:有可能这样得到基数吗
  • 问题2:我可以这样写我的数据结构吗
  • 问题3:有没有更好的方法

获取所需字符串值不需要使用基数函数。此外,在IIB esql中,基数是一个昂贵的(处理器密集型)函数

    DECLARE idlist CHAR '';
    FOR PTR AS InputRoot.JSON.Data.IDLIST.Item[] DO
        SET idlist = idlist || PTR.ID_IN  || ';'    ;           
    END FOR;
    
    SET idlist = TRIM(TRAILING ';' FROM idlist); --This is to get rid of the last ; in the string

不要使用标签-使用、和中的一个。我相信您使用的不是“嵌入式sql”;不过,我不确定您使用的是什么,它是扩展的sql标记,即在一个名为IBM集成总线(IIB)的工具中使用的esql。我已经更新了问题的正确标签,一旦批准,应该可以看到。@user2663557-如果您能告诉我上面的答案是否有用,我会的-希望我今天可以测试一下。非常感谢。