我得打电话给第三方所拥有的宁静服务。他们期望一个特定的条目作为数组。我在这里检查了一些问题并编写了代码来创建只有1个元素的数组。即便如此,该服务仍抱怨同样的问题。如果我没有传递该数组,它会正确响应。但不是预期的反应。说它推荐给我一些东西。我希望得到批准。如果我没有通过数组,我会回来调查。如果我通过数组我将回到异常,因为我期待“批准”
{
"orgCode": "XXX",
"modelCode": "XXX",
"event": {
"contacts": [
{
"name": "XXX",
"@id": "941689716",
"company": "XXX"
}
],.............................
因此。我尝试了两种方法,两者都抛出相同的异常
方法1:创建JSON数组并直接填充
JSONObject info = new JSONObject();
info.put("@id", "941689716");
info.put("name", "XXX");
info.put("company", "XX");
JSONArray contactsArray = new JSONArray();
contactsArray.add(info);
event.put("contacts", contactsArray.toString());
方法2:创建arraylist,将其添加到JSON Array
JSONObject info = new JSONObject();
info.put("@id", "941689716");
info.put("name", "XXX");
info.put("company", "XX");
List<JSONObject> objects = new ArrayList<JSONObject>();
objects.add(info);
JSONArray contactsArray = new JSONArray();
contactsArray.addAll(objects);
event.put("contacts", contactsArray.toString());
我尝试方法2的原因是因为,在例外情况下我看到他们期待arraylist
Can not deserialize instance of java.util.ArrayList out of START_OBJECT token\n at [Source: java.io.ByteArrayInputStream@52d91fcc; line: 1, column: 50] (through reference chain: com.xx.xx.xx.xx[\"event\"]->com.xx.xx.xx.Event[\"contacts\"])"})
我在IBM RAD上使用java 6,而JSON对象来自com.ibm.json.java包。由于法规
,我无法使用任何开源代码所以这是我的问题
如果我错了,请纠正我
或者
这可能是服务器方面的问题吗?我在另一个线程中读到,如果arraylist只有1个元素,他们必须处理它,否则它可能会抛出这个错误。
答案 0 :(得分:0)
我要感谢Sotirios-delimanolis。他的评论让我在数组末尾删除.toString(),同时在根JSON对象中设置它,嘿!!!!!那是有效的,我得到了批准的回复。