【问题标题】:How to fix error Incompatible types "required string, found json array"如何修复错误不兼容的类型“必需的字符串,找到 json 数组”
【发布时间】:2017-07-09 07:24:36
【问题描述】:

JSON:-

{
"events": ["wedding", "wed"],
"event_location": ["", ""],
"event_studio": [
    ["makeover", "epica", "Raddisson"],
    ["makeover", "epica"],
    ["Raddisson", "makeover", "contours"]
],
"event_studio_location": [
    ["Ernakulam", "thrissur", "kollam"],
    ["Ernakulam", "thrissur"],
    ["kollam", "Ernakulam", "Malappuram"]
]
} 

想从 json 中获取事件并将其存储在字符串数组中。

 String[] a=new String[responseBody.getJSONArray("events").length()];
 a=responseBody.getJSONArray("events");

显示错误 Incompatible types required string found json array

【问题讨论】:

  • a 是字符串数组,您正在尝试分配 JsonArray。这就是它给出错误的原因。你应该试试 a[i]=responseBody.getJSONArray("events").toString();
  • 好的我知道,但我想直接将json数组转换为字符串数组
  • 你可以用for循环来做同样的事情..

标签: java android json


【解决方案1】:

检查 JsonString 对象是即将到来的 Json String 、 JsonObjct 或 JsonArray。通过instanceof 并将您的JsonString 保存在JSONTokener

如下代码

Object object = new JSONTokener(jsonString).nextValue();

if (object instanceof JSONObject) 
{
  JSONObject jsonObject = (JSONObject) object;
}
else  if (object instanceof JSONArray)
{
  JSONArray jsonArray = (JSONArray) object;
}

【讨论】:

  • "检查 JsonString 对象是即将到来的 Json String , JsonObjct 还是 JsonArray" 你这是什么意思
  • 我们可以在 JsonTokenar 中保存 String 响应,并检查 Json 响应根节点是 Array 还是 Object 与内部节点中应用的相同。
  • 当你找到数组时,你可以像其他解决方案一样创建一个 for 循环并从 JsonArray 获取所有字符串。
【解决方案2】:

您不能直接将 jsonarray 转换为 String 数组。您可以使用此函数将 jsonarray 转换为 String:

public static String[] toStringArray(JSONArray array) {
if(array==null)
    return null;

String[] arr=new String[array.length()];
for(int i=0; i<arr.length; i++) {
    arr[i]=array.optString(i);
}
return arr;
}

这将解决您的问题。

【讨论】:

    【解决方案3】:

    试试下面的代码

    try {
            JSONObject jsonObject = new JSONObject(responseBody);
            JSONArray jsonArray = jsonObject.getJSONArray("events");
    
            String[] arrayEvents=new String[jsonArray.length()];
            for(int i=0; i<arrayEvents.length; i++) {
                arrayEvents[i]=jsonArray.optString(i);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多