繁体   English   中英

Android JSON解析和转换

[英]Android JSON Parsing And Conversion

早上好。

我正在尝试将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);    
    }

我创建了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 ,我只需要了解如何解析并将其转换为String的帮助即可。

如果您能指出我编程中的缺陷,将不胜感激。

毛罗

尝试这个..

您的回应如下

{                             ==> 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));
}

解析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更有效。

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){

}

请参阅此链接以获取更多信息

尝试这个。

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));
}

首先,您似乎忽略了在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"]
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);    
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM