当前位置: 首页 > 面试题库 >

在Android中解析动态JSON

单于楚
2023-03-14
问题内容

我有一个json对象是这样的:

{
    Yg7R_: {
    fld_invoice: "Yg7R_"
    fld_order_id: "5"
        fld_orders: {
            4: {
                fld_oiid: "4"
                fld_date: "2014-03-27 00:00:00"
                fld_name: "20140327_H5epz2y4OB_IMG_20140326_020341.jpg"
                fld_loc: "../orders/oid_5/"
            }
        }
    }
    LldP_: {
    fld_invoice: "LldP_"
    fld_order_id: "7"
        fld_orders: {
            6: {
                fld_oiid: "6"
                fld_date: "2014-03-27 00:00:00"
                fld_name: "20140327_SovH7Xf3n2_IMG_20140326_020418.jpg"
                fld_loc: "../orders/oids_7/"
            }
        }
    }
    NYEO: {
        fld_invoice: "NYEO"
        fld_order_id: "24"
        fld_orders: {
            27: {
                fld_oiid: "27"
                fld_date: "2014-03-27 00:00:00"
                fld_name: "20140327_duLLsssVWA_IMG_20140326_020341.jpg"
                fld_loc: "orders/oid_24/"
            }
            28: {
                fld_oiid: "28"
                fld_date: "2014-03-27 00:00:00"
                fld_name: "20140327_F8ayA4vWrP_IMG_20140326_020405.jpg"
                fld_loc: "orders/oid_24/"
            }
            29: {
                fld_oiid: "29"
                fld_date: "2014-03-27 00:00:00"
                fld_name: "20140327_1FlYnuNbtr_IMG_20140326_020418.jpg"
                fld_loc: "orders/oid_24/"
            }
        }
    }
}

我试图这样解析:

    // result is the above json object.
    for(int i = 0; i < result.length(); i++){
    try {
        invoice = result.getJSONArray(<Some name here>); // this name is dynamic
        Log.d("invoice "+i, invoice);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

但是我不知道如何访问动态名称。我们如何解析这样的JSON

-注意-Ya的 所有值都带有引号,例如:“ Yg&R_”


问题答案:

试试这个动态的JSON解析器

private void parseJson(JSONObject data) {

        if (data != null) {
            Iterator<String> it = data.keys();
            while (it.hasNext()) {
                String key = it.next();
                try {
                    if (data.get(key) instanceof JSONArray) {
                        JSONArray arry = data.getJSONArray(key);
                        int size = arry.length();
                        for (int i = 0; i < size; i++) {
                            parseJson(arry.getJSONObject(i));
                        }
                    } else if (data.get(key) instanceof JSONObject) {
                        parseJson(data.getJSONObject(key));
                    } else {
                        System.out.println(key + ":" + data.getString(key));
                    }
                } catch (Throwable e) {
                    try {
                        System.out.println(key + ":" + data.getString(key));
                    } catch (Exception ee) {
                    }
                    e.printStackTrace();

                }
            }
        }
    }


 类似资料:
  • 我使用flink动态分析json类型的数据,对keyby和给定的列求和,在我的mapFunction中,我将json转换为case类,但结果流没有在keyby函数中得到编译器,在线程“main”org.apache.flink.api.common.InvalidProgramException中得到错误。我的代码如下所示 我如何将json转换为case类或tuple?

  • 问题内容: 我如何使用Gson这个网址解析这个json物件:http://apis.skplanetx.com/weather/forecast/3hours ? appKey = 4ce0462a-3884-30ab-ab13-93efb1bc171f&version = 1&lon = 127.9259&lat = 36.991 我如何为该json对象编写Java模型。我不想写每个这样的变量。

  • 问题内容: 我目前正在开发一个Android项目,该项目需要我调用网络服务,该服务将返回一个json文件。我一直在使用GSON库来解析所有json文件并获取一个JSON对象。在我遇到关键字段是动态的json数据之前,它一直运行良好。此文件的示例如下: 我能够基于键ID“ 0”获得计数,但是我不确定如何利用该值来获取其他键对象(键ID 1-5),该键对象包含以下数据:我需要。如果有人在这件事上能帮助

  • 问题内容: 我如何解析这个json对象: 我可以有N个端口,每个端口的值始终是key:value对。 到目前为止,我已经尝试过了: 有了这个我得到键(0,1),但值是空的。 我也尝试过这个: 但也不行。 这就是我解码json对象的方式: 问题答案: 使用此类型: 游乐场的例子 笔记: 字段名称非常匹配。我使用字段名称“ Ports”来匹配JSON文本中使用的名称。 Go类型在JSON中应具有相同级

  • 问题内容: 我有JSON对象,如下所示: 我想在android中解析数据并将其存储到数据库中,但是我在Jsonobject中感到困惑,谢谢 问题答案: 以下是用于解析json字符串的代码段代码。请经历一下:

  • 问题内容: 我想读这行,但是因为它以我开始有些困惑 我只需要使用“名称”并将所有另存为一个字符串。(字符串值将是:Jeff Bridges,Charles Grodin,Jessica Lange,John Randolph,Rene Auberjonois)。 这是我的代码: 问题答案: 如果您使用的是“名称”,为什么您的代码片段看起来像是试图获取“字符”的尝试? 无论如何,这与任何其他类似于列