enter code here我正在构建一组函数,它们根据参数和内部选择返回一个json字符串.
我遇到的问题是因为我在pl/sql中循环游标,构建json的结构,它在最后一个节点的末尾添加了一个额外的逗号.
它正确解析,但由于额外的逗号,json的html eval失败了.是否可以删除pl/sql中的特定字符(比如字符串中的最后一个逗号).我查看了REPLACE,但是我找不到使用REPLACE和特定字符实例的文档.
循环看起来像:
FOR appGroup IN appGroups
LOOP
tsResults := tsResults || ' "Group" : { ';
tsResults := tsResults || ' "Id" : "' || appGroup.group_id || '", ';
tsResults := tsResults || '"Name" : "' || appGroupd.display_name || '" ';
tsResults := tsResults || ' }, ';
END LOOP;
Run Code Online (Sandbox Code Playgroud)
这是最后一行的最后一个逗号给了我悲伤.
有没有办法杀死最后一个没有抓取它之前的所有字符串字符,以及它之后的所有字符并将它们组合在一起?
关于如何解决这个问题的任何建议都将非常感激.
更新
使用Cybernate的答案我能够进行一些更改以使其工作......最初是在END LOOP之后立即进行的; 我有额外的代码添加更多的结果字符串:
tsResults := tsResults || '}] }';
Run Code Online (Sandbox Code Playgroud)
哪个正确终止了我正在处理的组数组...
我在该行之前放置了以下代码:
tiLastComma := INSTR(tsResults, ',', -1);
tsResults := SUBSTR(tsResults, 1, tiLastComma - 1);
Run Code Online (Sandbox Code Playgroud)
现在json正确终止,并且在与jquery一起使用时可以正常进行.
小智 7
它更容易使用该rtrim功能。所以在循环之后:
tsResults := rtrim( tsResults, ',' );
Run Code Online (Sandbox Code Playgroud)
然后要终止 JSON,请在同一语句中添加右大括号:
tsResults := rtrim( tsResults, ',' ) || '}';
Run Code Online (Sandbox Code Playgroud)
您可以使用INSTR函数查找","的最后一次出现的位置,然后使用SUBSTRING.
SELECT SUBSTR(tsResults , 1, INSTR(tsResults , ',', -1)-1)
INTO tsResults
FROM dual;
Run Code Online (Sandbox Code Playgroud)
如果您认为正则表达式不适用于此,请在PL/SQL中使用此语句:
SELECT REGEXP_REPLACE(tsResults , '\s*,\s*$', '')
INTO tsResults
FROM dual;
Run Code Online (Sandbox Code Playgroud)