将包含bundle的Bundle转换为JSON

时间:2016-03-07 21:07:43

标签: java android json bundle

我有一个捆绑包,我想将其转换为一个大的JSONObject,以便稍后我可以通过Web服务发送它。这个主包主要包含字符串和整数,但它还包含另一个包,其中包含具有4个键值对的包。

这是一个清除任何混淆的图表: enter image description here

代码:

private JSONObject convertBundleToJSON(Bundle b)
{
    //the main json object to be returned
    JSONObject json = new JSONObject();


    Set<String> keys = b.keySet();
    for (String key : keys) {
        try {
            // json.put(key, bundle.get(key)); see edit below
            json.put(key, JSONObject.wrap(b.get(key)));
        } catch(JSONException e) {
            //Handle exception here
            Log.d("Convert Bund", e.toString());
        }
    }


    JSONObject fvl = new JSONObject();


    int i = 0;

    //error right here - b is a bundle of bundles; trying to iterate through
    Set<Bundle> bundles = (Set<Bundle>) b.get("field_value_list");
    for (Bundle bun : bundles)
    {

        JSONObject f = new JSONObject();
        try {

            f.put("fld_value_decode", bun.get("fld_value_decode"));
            f.put("fld_id", bun.get("fld_id"));
            f.put("fld_value", bun.get("fld_value"));
            f.put("fld_name", bun.get("fld_name"));

            fvl.put(i+"",f);

            i++;

        } catch(JSONException e) {
            //Handle exception here
            Log.d("FVL Convert Bund", e.toString());
        }
    }


    try {
        json.put("field_value_list", fvl);
    } catch (JSONException e) {
        e.printStackTrace();
    }


    return json;
}

但是我在错误行得到了一个转换异常。它不喜欢bundle和set之间的强制转换。任何想法或替代方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以通过创建可分割的模型类来实现此目的,而不是采用这种复杂的方式。

只需将那些json添加到该模型并进一步传递它,使用它会更简单。