【问题标题】:How to get particular hashmap keys and values from json objects如何从 json 对象中获取特定的 hashmap 键和值
【发布时间】:2014-08-15 05:32:43
【问题描述】:

我要做的是来自服务器的fetch艺术家值,以便我可以将数据与基本网址结合起来。 我已经将InputStream 转换为String,但我认为将json String 转换为HashMap 时遇到了一些问题。我被这个问题困扰了 2 周...... :(

这是来自服务器的结果。 (字符串输入)

{"musicInfo":      [{"music_id":"4","artists":"Gummy","file_name":"Thinkaboutme","jacket_thumbnail":"thThink","jacket_name":"oriThink","is_on_server":"1","is_liked":"0","created":"2014-08-11 20:00:17"},{"music_id":"3","artists":"Beenzino","file_name":"Aquaman","jacket_thumbnail":"thAquaman","jacket_name":"oriAquaman","is_on_server":"1","is_liked":"0","created":"2014-08-11 19:59:31"},{"music_id":"2","artists":"BrunoMars","file_name":"Justthewayyouare","jacket_thumbnail":"thJustTheWayYouAre","jacket_name":"oriJustTheWayYouAre","is_on_server":"1","is_liked":"0","created":"2014-08-11 19:58:21"},{"music_id":"1","artists":"BrunoMars","file_name":"Grenade","jacket_thumbnail":"thGrenade","jacket_name":"oriGrenade","is_on_server":"1","is_liked":"0","created":"2014-08-11 19:56:51"}]}

编辑器格式化的 JSON:

{
    "musicInfo": 
    [
        {
            "music_id": "4", 
            "artists": "Gummy", 
            "file_name": "Thinkaboutme", 
            "jacket_thumbnail": "thThink", 
            "jacket_name": "oriThink", 
            "is_on_server": "1", 
            "is_liked": "0", 
            "created": "2014-08-11 20:00:17"
        }, 
        {
            "music_id": "3", 
            "artists": "Beenzino", 
            "file_name": "Aquaman", 
            "jacket_thumbnail": "thAquaman", 
            "jacket_name": "oriAquaman", 
            "is_on_server": "1", 
            "is_liked": "0", 
            "created": "2014-08-11 19:59:31"
        }, 
        {
            "music_id": "2", 
            "artists": "BrunoMars", 
            "file_name": "Justthewayyouare", 
            "jacket_thumbnail": "thJustTheWayYouAre", 
            "jacket_name": "oriJustTheWayYouAre", 
            "is_on_server": "1", 
            "is_liked": "0", 
            "created": "2014-08-11 19:58:21"
        }, 
        {
            "music_id": "1", 
            "artists": "BrunoMars", 
            "file_name": "Grenade", 
            "jacket_thumbnail": "thGrenade", 
            "jacket_name": "oriGrenade", 
            "is_on_server": "1", 
            "is_liked": "0", 
            "created": "2014-08-11 19:56:51"
        }
    ]
}

MainActivity.java:

private String getMusicInfo(String url) {

    InputStream inputStream = null;
    String inputStr = "";
    HashMap<String, String> map = new HashMap<String, String>();

    try {
        URL getMusicUrl = new URL(url);
        conn = (HttpURLConnection) getMusicUrl.openConnection();
        conn.setDoInput(true);
        conn.connect();
        Log.d(TAGCP, "MADE POST REQUEST TO THE GIVEN URL");

        inputStream = conn.getInputStream();


        if (inputStream != null) {
            inputStr = Util.convertInputStreamToString(inputStream);
            Log.i(TAGCS, inputStr);

            JSONParser jsonParser = new JSONParser();
            JSONObject jsonObject = (JSONObject) jsonParser.parse(inputStr);
            String artistsName = (String) jsonObject.get("artists");
            // Debug: artistsName == null... what is happening!!?
            System.out.println(artistsName);

        } else {
            inputStr = "Did not work!";
            Log.d(TAGRR, inputStr);
        }
    } catch(Exception e) {
        Log.i("InputStream", e.getLocalizedMessage());
    }

    return inputStr;

} 

【问题讨论】:

  • 请指定哈希映射应该包含什么,预期的键是什么,预期的值是什么?目前它只有一个带有密钥musicInfo的条目
  • 在下次发布之前自己格式化您的代码。
  • 很抱歉我还没有考虑到这一点...:(
  • hashmap 应该包含 music_id、artists、file_name、jacket_thumbnail..
  • 您的JSON 是来自org.json 还是org.json.simple

标签: android json hashmap


【解决方案1】:

您知道 json 具有的键,因此您可以使用 GSON 编写非常简单的内容。

// ...

String json = "YOUR JSON";
MusicInfo list = new Gson().fromJson(json, MusicInfo.class);
for(MusicInfo.Info info: list.musicInfo) {
System.out.println("artists: " + info.artists);

// ...

MusicInfo 类也很简单。

import java.util.List;

public class MusicInfo {

    public List<Info> musicInfo;

    public static class Info {
        public String artists;
        public String created;
        public String file_name;
        public int is_liked;
        public int is_on_server;
        public String jacket_name;
        public String jacket_thumbnail;
        public long music_id;
    }
}

你会得到

I/System.out﹕ artists: Gummy
I/System.out﹕ artists: Beenzino
I/System.out﹕ artists: BrunoMars
I/System.out﹕ artists: BrunoMars

【讨论】:

  • 我还有一个问题!有没有其他方法可以将字符串 json 放到 hashmap 中?以便我可以随时使用它。
  • 我找到了这个答案stackoverflow.com/a/15943171/1726166,但我还没有尝试过。似乎将所有值都转换为字符串。
猜你喜欢
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 2019-06-13
  • 2017-11-22
  • 1970-01-01
相关资源
最近更新 更多