嗨,大家好,我正在开发Restful + JSON Servlet,但是如果尝试使用此方法编译项目源代码,则会遇到一个奇怪的问题:

public
static
WipdDBTable
parseJSON(String JSONBody)
{
    JSONObject jsonObj;
    JSONTokener jsonTok;
    Iterator it;
    String[] labels;
    String[][] fields;
    int i;

    try  {
        jsonTok = new JSONTokener(JSONBody);
        jsonObj = new JSONObject(jsonTok);

        labels = new String[jsonObj.length()];
        fields = new String[1][labels.length];

        i = 0;
        it = jsonObj.keys();
        while(it.hasNext())  {
            String key = it.next().toString();
            labels[i] = key;
            fields[0][i] = jsonObj.get(key);
            i++;
        }

        return new WipdDBTable(labels, fields);
    } catch(JSONException ex)  {
        return null;
    }
}


我收到此错误:

WipdJSON.java:102: incompatible types
found   : java.lang.Object
required: java.lang.String
                fields[0][i] = jsonObj.get(key);


所以我写了一个测试类,它的资源显然是相同的,但是有了这个我没有任何错误:

public class jsontest
{
    public static
    void
    main(String[] args)
    {
        String s1;
        JSONObject jsonObj;
        JSONTokener jsonTok;

        s1 = "{\"lo\":\"ol\",\"json\":{\"1\":\"2\"},\"yo\":{\"lol\":\"lol\"}}";

        try  {
            jsonTok = new JSONTokener(s1);
            jsonObj = new JSONObject(jsonTok);

            Iterator it = jsonObj.keys();
            while(it.hasNext())  {
                String key = it.next().toString();
                System.out.print(key + "=>");
                System.out.println(jsonObj.get(key));
            }
        } catch(JSONException ex)  {
            ex.printStackTrace();
        }

    }
}

最佳答案

jsonObj.get(key);返回一个Object,如果要获取String变量中的值,则需要将其强制转换为String。 JSONObject类中有一个getString方法:

fields[0][i] = jsonObj.getString(key);


而且,在测试类中不会出现任何错误,因为您仅输出调用toString()方法的值。

09-25 18:17
查看更多