【问题标题】:Use JSON object in java Hashmap在 java Hashmap 中使用 JSON 对象
【发布时间】:2016-05-05 09:13:51
【问题描述】:

我想根据 JSON 对象中的键值检索所有值。

这是我的 JSON 示例:

 [{
   "zip":544,
   "type":"UNIQUE",
   "primary_city":"Holtsville",
   "acceptable_cities":"",
   "unacceptable_cities":"Irs Service Center",
   "state":"NY",
   "county":"Suffolk County",
   "timezone":"America/New_York",
   "area_codes":"631",
   "latitude":40.81,
   "longitude":-73.04,
   "world_region":"NA",
   "country":"US",
   "decommissioned":0,
   "estimated_population":0,
   "notes":""
 },
 {
   "zip":601,
   "type":"STANDARD",
   "primary_city":"Adjuntas",
   "acceptable_cities":"",
   "unacceptable_cities":"Colinas Del Gigante, Jard De Adjuntas, Urb San Joaquin",
   "state":"PR",
   "county":"Adjuntas",
   "timezone":"America/Puerto_Rico",
   "area_codes":"787,939",
   "latitude":18.16,
   "longitude":-66.72,
   "world_region":"NA",
   "country":"US",
   "decommissioned":0,
   "estimated_population":0,
   "notes":""
 }]

所以基于我的邮政编码作为键,我想检索所有其他值。

我曾为具有单个键值对的 JSON 对象尝试过相同的操作,但不知道如何对上述 JSON 对象执行此操作。

这是我成功运行的单键值对代码

import java.util.HashMap;
import java.util.Iterator;

import org.json.JSONObject;

public class map {

    public static void main(String[] args) {
        String t = "{\"A\":\"A1\",\"B\":\"B1\",\"C\":\"C1\"}";

        HashMap<String, String> map = new HashMap<String, String>();
        JSONObject jObject = new JSONObject(t);
        Iterator<?> keys = jObject.keys();

        while( keys.hasNext() ){
            String key = (String)keys.next();
            String value = jObject.getString(key);
            map.put(key, value);
        }

        System.out.println("json : "+jObject);
        System.out.println("map : "+map.get("A"));

    }

}

输出:

json : {"A":"A1","B":"B1","C":"C1"}
map : A1

有什么建议吗?

我之前看过几个答案,但都没有解决这个问题?

【问题讨论】:

  • 你的 JSON 是一个对象数组吗?
  • 是的..在我的问题中编辑了 JSON 以便更清楚
  • 请。检查我的答案,这会有所帮助。
  • 您可以使用jackson objectmapper,而不是编写自己的逻辑来将json转换为map。检查这个 - mkyong.com/java/how-to-convert-java-object-to-from-json-jackson

标签: java json hashmap


【解决方案1】:

你可以这样做。在循环结束时,您的地图将具有 zip 到 JSONObject 的映射。

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class Main {

    public static void main(String[] args) {
        String json = "[{\n" +
                "   \"zip\":544,\n" +
                "   \"type\":\"UNIQUE\",\n" +
                "   \"primary_city\":\"Holtsville\",\n" +
                "   \"acceptable_cities\":\"\",\n" +
                "   \"unacceptable_cities\":\"Irs Service Center\",\n" +
                "   \"state\":\"NY\",\n" +
                "   \"county\":\"Suffolk County\",\n" +
                "   \"timezone\":\"America/New_York\",\n" +
                "   \"area_codes\":\"631\",\n" +
                "   \"latitude\":40.81,\n" +
                "   \"longitude\":-73.04,\n" +
                "   \"world_region\":\"NA\",\n" +
                "   \"country\":\"US\",\n" +
                "   \"decommissioned\":0,\n" +
                "   \"estimated_population\":0,\n" +
                "   \"notes\":\"\"\n" +
                " },\n" +
                " {\n" +
                "   \"zip\":601,\n" +
                "   \"type\":\"STANDARD\",\n" +
                "   \"primary_city\":\"Adjuntas\",\n" +
                "   \"acceptable_cities\":\"\",\n" +
                "   \"unacceptable_cities\":\"Colinas Del Gigante, Jard De Adjuntas, Urb San Joaquin\",\n" +
                "   \"state\":\"PR\",\n" +
                "   \"county\":\"Adjuntas\",\n" +
                "   \"timezone\":\"America/Puerto_Rico\",\n" +
                "   \"area_codes\":\"787,939\",\n" +
                "   \"latitude\":18.16,\n" +
                "   \"longitude\":-66.72,\n" +
                "   \"world_region\":\"NA\",\n" +
                "   \"country\":\"US\",\n" +
                "   \"decommissioned\":0,\n" +
                "   \"estimated_population\":0,\n" +
                "   \"notes\":\"\"\n" +
                " }]";
        Map<Integer, JSONObject> map = new HashMap<>();
        JSONArray array = new JSONArray(json);
        for (int i = 0; i < array.length(); i++) {
            JSONObject jsonObject = array.getJSONObject(i);
            map.put(jsonObject.getInt("zip"), jsonObject);
        }


    }
}

【讨论】:

  • 是的,谢谢,只是代码中的一个小修正,在倒数第二行使用“i”而不是 0
  • 还有一件事,如何将我的整个数组转换为您在代码中使用的漂亮格式化字符串?因为这是一个巨大的数据,我不想手动做。
  • 我使用 IntelliJ IDEA。我只是复制粘贴了整个内容,并在需要的地方将其转换为转义字符。
猜你喜欢
  • 2019-05-03
  • 2016-06-14
  • 1970-01-01
  • 2012-08-22
  • 2017-08-31
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多