【问题标题】:Parsing JSON and put it in HashMap解析 JSON 并放入 HashMap
【发布时间】:2014-04-01 15:16:14
【问题描述】:

我有一个这样的 json 模式

objects: [
    -{
        category: {
            id: 4,
            image: "category image url",
            title: "LIGHT"
        },
        create_time: "2014-03-20T17:57:23",
        file_url: "file url",
        id: 26,
        title: "Note",
        user: {
            avatar: "thumb url",
            id: 12,
            name: "user name"
        }
    }
    -{
        category: {
            id: 1,
            image: "category image url",
            title: "HEAVY"
        },
        create_time: "2014-03-20T17:57:23",
        file_url: "file url",
        id: 25,
        title: "Photo",
        user: {
            avatar: "thumb url",
            id: 2,
            name: "user name"
        }
    }
    .
    .
    .
]

当我解析这个块时,一切都很好,直到我想将解析的节点放入 Hashmap。 用于解析我将节点和对象定义为 TAG 之类的

public static final String TAG_CAT_ID           = "id";
public static final String TAG_TONE_ID          = "id";
public static final String TAG_USER_ID          = "id";
public static final String TAG_CAT_TITLE        = "title";
public static final String TAG_TITLE            = "title";

然后我在 For 循环中解析它们并将结果保存为这样的字符串:

String cat_id                   = category.getString(TAG_CAT_ID);
String cat_title                = category.getString(TAG_CAT_TITLE);
String file_id                  = file.getString(TAG_TONE_ID);
String file_title               = file.getString(TAG_TITLE);
String user_id                  = user.getString(TAG_USER_ID);

正如我应该说的......类别、文件和用户定义为 JSON 对象。 到目前为止一切正常,我可以得到我想要的结果:

cat_id     -> 4
cat_title  -> LIGHT
file_id    -> 26
file_title -> Note
user_id    -> 12
----------------------
cat_id     -> 1
cat_title  -> HEAVY
file_id    -> 25
file_title -> Photo
user_id    -> 2

在本节之后,我将这个结果放在 HashMap 中,如下所示:

HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_CAT_ID, cat_id);
map.put(TAG_TONE_ID, tone_id);
map.put(TAG_USER_ID, user_id);

灾难发生了!!对于每个对象...哈希映射只返回一个 id !!!!!! cat_id、file_id、user_id 相同的 id.......cat_title 和 file_title 一个标题!!!

我哪里错了?!

【问题讨论】:

  • 如果您将现有键的值放入HashMap,则该键的先前值将被覆盖。有意义吗?
  • 灾难发生是因为您放置的 TAG_CAT_ID、TAG_TONE_ID、TAG_USER_ID 都具有相同的字符串值。 Hashmap 只能有唯一的键。重复项将被覆盖。
  • 嗯....我该怎么办?!我无法更改 api :(
  • 您始终可以使用 MultiMap。 guava-libraries.googlecode.com/svn/tags/release03/javadoc/com/… 在这种情况下,您将拥有三个具有相同名称的键 - “id”。不确定如何区分它们。也许 MultiMap 保持顺序;我以前从未使用过。

标签: java android json hashmap baseadapter


【解决方案1】:
public static final String TAG_CAT_ID           = "id";
public static final String TAG_TONE_ID          = "id";
public static final String TAG_USER_ID          = "id";

这些 ID 是相同的,因此当您输入值时,您使用相同的键。这样,您将覆盖“id”键的值 3 次。

你的代码相当于这个:

map.put("id", cat_id);
map.put("id", tone_id);
map.put("id", user_id);

您应该定义您的 ID-s 唯一性。

【讨论】:

  • 看一下Hashmap.put()方法的javadoc。
  • 我为什么要看那个?
  • 就像 Julien 写的那样 - 阅读 javadoc。每次为键赋值时,旧值(如果存在)都会被覆盖。
  • 哦,我想你让我阅读 JavaDoc :) 为什么 MAY3AM 的评论没有显示。
  • 谢谢大家.....我定义了最终的字符串标签并通过分配 cat_id、file_id 和 user_id 而不是 id、id 和 id 解决了这个问题:D
猜你喜欢
  • 2021-09-01
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多