Android JSON解析和转换

时间:2013-12-19 11:20:00

标签: java android json

早上好。

我正在尝试将JSON data解析成字符串,但我认为我做错了什么:这是部分。

private void read_JSON()
    {
    String JSON;
        JSONObject jso3 = new JSONObject(JSON);
        for (int i=0; i < jso3.length(); i++)
        {

        try
        {

            String name = jso3.getString("Nombre");
            String surname = jso3.getString("Apellidos");
            String date = jso3.getString("Año_nacimiento");
            String child_names = jso3.getString("Nombres_Hijos");


        }catch (JSONException e)
        {
            e.printStackTrace();
        }

        }
    jso3.toString(JSON);    
    }

我在MainActivity.java中创建了 ,它不在单独的文件中。

以下是JSON创建的代码:

private void create_JSON()
{
    JSONObject jso = new JSONObject();

    try {
        jso.put("Nombre","Miguel");
        jso.put("Apellidos", "Garcia");
        jso.put("Año_nacimiento", 1990);
        JSONArray jsa = new JSONArray();
        jsa.put("Blur");
        jsa.put("Clur");
        jso.put("Nombres_Hijos", jsa);

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    jso.toString();

我毫不怀疑JSON是否已正确创建,我只需要帮助理解如何解析它并将其转换为字符串。

如果你能指出我编程中的缺陷,我将非常感激。

莫罗。

6 个答案:

答案 0 :(得分:2)

试试这个..

您的回复如下

{                             ==> JSONObject
    "Año_nacimiento": 1990,   ==> String from JSONObject
    "Nombres_Hijos": [        ==> JSONArray 
        "Blur",               ==> Directly from JSONArray
        "Clur"
    ],
    "Apellidos": "Garcia",
    "Nombre": "Miguel"
}

解析 JSON使用以下代码:

JSONObject jso3 = new JSONObject(output);
String name = jso3.getString("Nombre");
String surname = jso3.getString("Apellidos");
int date = jso3.getInt("Año_nacimiento");
JSONArray menuObject = jso3.getJSONArray("Nombres_Hijos");
for(int i=0;i<menuObject.length;i++){   
   System.out.println(menuObject.getString(i));
}

答案 1 :(得分:2)

在解析JSON时使用以下选项以避免常见错误。

JSONObject jso3 = new JSONObject(output);
String name = jso3.optString("Nombre",""); // here default value is blank ("")
String surname = jso3.optString("Apellidos",null);// here default value is null
int date = jso3.getInt("Año_nacimiento",0); // here default value is ZERO (0)
JSONArray menuObject = jso3.getJSONArray("Nombres_Hijos");
for(int i=0;i<menuObject.length;i++){   
System.out.println(menuObject.getString(i));
}

使用 opt 选项可以设置默认返回值。如果该标记在JSON数据中不可用,您将获得默认值。

这对我来说比GSON lib更好。

答案 2 :(得分:1)

try{   

 String JSON ;
        JSONObject jso3 = new JSONObject(JSON);
        JSONArray menuObject = new JSONArray(jObject.getString("array_inside_json"));   
        for(int i=0;i<menuObject.length;i++){   
        name=jObject.getString("inside"));          


        }

}catch(Exception e){

}

请参阅此link了解详情

答案 3 :(得分:1)

试试这个。

String apellidos = jso.getString("Apellidos");
System.out.println(apellidos);

int str2 = jso.getInt("Año_nacimiento");
System.out.println(str2);

String nombre = jso.getString("Nombre");
System.out.println(nombre);

JSONArray array = jso.getJSONArray("Nombres_Hijos");
for(int i = 0; i < array.length(); i++){
    System.out.println(array.get(i));
}

答案 4 :(得分:1)

首先,你似乎忽略了在read_JSON中创建的字符串,但我假设你这样做是为了避免在这里粘贴过多的代码。

问题在于这一行:

 String child_names = jso3.getString("Nombres_Hijos");

因为字段Nombres_Hijos是JsonArray,而不是String。要阅读它,请使用:

JSONArray jsa = jso3.getJSONArray("Nombres_Hijos");

现在,所有人都对这些数据需要做的事情进行了解决。 最简单的案例是:

String names = jsa.toString(); //["Blur","Clur"]

答案 5 :(得分:1)

private void read_JSON(String json)
    {

       JSONObject jObject= new JSONObject(json);
        JSONArray jso3= new JSONArray(jObject.getString("Nombres_Hijos"));   


        for (int i=0; i < jso3.length(); i++)
        {

        try
        {

            String name = jso3.getString("Nombre");
            String surname = jso3.getString("Apellidos");
            String date = jso3.getString("Año_nacimiento");
            String child_names = jso3.getString("Nombres_Hijos");


        }catch (JSONException e)
        {
            e.printStackTrace();
        }

        }
    jso3.toString(JSON);    
    }