当值以列表格式出现时,如何将JSONOBJECT转换为JSONARRAY?

时间:2017-03-30 05:13:01

标签: json ajax

我正在将jsonobject视为[{" id":" [66]"}]如何转换为jsonarray?

Here is my code:
 public Object[] showCampaigns(@RequestParam("selectedAccId") String selectedAccId, HttpSession session, Model model) {
        Object[] responseBody = new Object[1];
        List<Long> accountIds=new ArrayList<>();

        try {
            JSONArray clientjson = new JSONArray(selectedAccId);

            for (int i = 0; i < clientjson.length(); ++i) {
                JSONObject rec = clientjson.getJSONObject(i);
                long id = Long.parseLong(rec.getString("id"));
                accountIds.add(id);
            }
}

错误我&#39; am gettinbg是: Long.parseLong(rec.getString(&#34; id&#34;))=&gt;目标VM发生异常:对于输入字符串:&#34; [66]&#34;&lt;

2 个答案:

答案 0 :(得分:0)

id的值是一个字符串,"[66]",实际上不能解析为长。

问题不一定与您的代码有关,而是与此响应所来自的服务器有关,这就是应该更正的位置。

如果不可能:

您需要将其作为字符串获取,并将其解析为您自己的字符串;这是一个删除任何非数字的正则表达式。

...
// strip any non digit
String number = rec.getString("id").replaceAll("\\D+","");

// parse number only string
long id = Long.parseLong(number);

source of regex

答案 1 :(得分:0)

您正在尝试解析具有&#39; [66]&#39;到了。

您只能将只有数字的字符串转换为Long

 long id = Long.parseLong(rec.getString("id"));

将此代码可视化为

 long id = Long.parseLong("[66]");

由于这一点,你得到了这个问题。

尝试使用类似的东西从字符串中删除所有标点符号,包括左括号和右括号。

String stringId= rec.getString("id").replaceAll("\\p{P}","");
 long id = Long.parseLong(stringId);