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

如何解析具有相同结构但名称不同的json数组

柯捷
2023-03-14
问题内容

我想解析一个json文件,但它经过这样的事情:

CDG: {
id: "32569",
airport_name: "Charles De Gaulle",
latitude: "49.0167",
longitude: "2.55",
timezone: "2",
dst_indicator: "E",
city: "Paris",
country: "France",
country_code: "FR",
region: "TC1",
listing_display: "true",
pseudonyms: ""
},
ORY: {
id: "33539",
airport_name: "Orly",
latitude: "48.7167",
longitude: "2.3833",
timezone: "2",
dst_indicator: "E",
city: "Paris",
country: "France",
country_code: "FR",
region: "TC1",
listing_display: "true",
pseudonyms: ""
},
LBG: {
id: "123425",
airport_name: "Le Bourget",
latitude: "48.969444",
longitude: "2.441389",
timezone: "1",
dst_indicator: "E",
city: "Paris",
country: "France",
country_code: "FR",
region: "TC1",
listing_display: "true",
pseudonyms: ""
},

但是大约有三千个这样的对象。我一直在使用Gson解析我的json对象,但是我怎么解析这种文件呢?以及如何检索名称“ CDG”或“ ORY”?


问题答案:

您可以尝试如下操作:

  String str = "{CDG: {\n"
                + "id: \"32569\",\n"
                + "airport_name: \"Charles De Gaulle\",\n"
                + "latitude: \"49.0167\",\n"
                + "longitude: \"2.55\",\n"
                + "timezone: \"2\",\n"
                + "dst_indicator: \"E\",\n"
                + "city: \"Paris\",\n"
                + "country: \"France\",\n"
                + "country_code: \"FR\",\n"
                + "region: \"TC1\",\n"
                + "listing_display: \"true\",\n"
                + "pseudonyms: \"\"\n"
                + "},\n"
                + "ORY: {\n"
                + "id: \"33539\",\n"
                + "airport_name: \"Orly\",\n"
                + "latitude: \"48.7167\",\n"
                + "longitude: \"2.3833\",\n"
                + "timezone: \"2\",\n"
                + "dst_indicator: \"E\",\n"
                + "city: \"Paris\",\n"
                + "country: \"France\",\n"
                + "country_code: \"FR\",\n"
                + "region: \"TC1\",\n"
                + "listing_display: \"true\",\n"
                + "pseudonyms: \"\"\n"
                + "},\n"
                + "LBG: {\n"
                + "id: \"123425\",\n"
                + "airport_name: \"Le Bourget\",\n"
                + "latitude: \"48.969444\",\n"
                + "longitude: \"2.441389\",\n"
                + "timezone: \"1\",\n"
                + "dst_indicator: \"E\",\n"
                + "city: \"Paris\",\n"
                + "country: \"France\",\n"
                + "country_code: \"FR\",\n"
                + "region: \"TC1\",\n"
                + "listing_display: \"true\",\n"
                + "pseudonyms: \"\"\n"
                + "}}";

使用gson,您可以按以下方式检索键名:

        Gson gson = new Gson();
        Object o = gson.fromJson(str, Object.class);
        List keys = new ArrayList();
        Collection values = null;
        if (o instanceof Map) {
            Map map = (Map) o;
            keys.addAll(map.keySet()); // collect keys at current level in hierarchy
            values = map.values();
        } else if (o instanceof Collection) {
            values = (Collection) o;
        }
        System.out.println(keys);// [CDG, ORY, LBG]
        for (int i = 0; i < keys.size(); i++) {
            System.out.println(keys.get(i));
        }

并使用java-
json
可以执行以下操作:

    JSONObject jsonObject = new JSONObject(str);
        String[] names = jsonObject.getNames(jsonObject);
        for (int i = 0; i < names.length; i++) {

            System.out.println(names[i]);// all names are printed here : LBG,ORY, etc

            // then parsing the names accordingly..
            JSONObject jsonObject1 = jsonObject.getJSONObject(names[i]);
            System.out.println(jsonObject1.getString("city"));
        }

从网址获取json:

   public static String connectionGet(String url, String parameter) throws MalformedURLException, ProtocolException, IOException {

    URL url1 = new URL(url);
    HttpURLConnection request1 = (HttpURLConnection) url1.openConnection();
    request1.setRequestMethod("GET");
    request1.connect();
    String responseBody = convertStreamToString(request1.getInputStream());
    return responseBody;
}

String str = connectionGet("http://www.cleartrip.com/common/json/airports.json", "");


 类似资料:
  • 在我的程序中,我得到以下返回组名的字符串: 有时甚至更多的组名: 所以我有了所有组的名称,但它们之间用逗号隔开,嵌套在文本中。 如何从引号之间的字符串中获得所有单词? 我想把下面的组名从上面的字符串写到一个数据帧中,例如: 当前1 断开扭矩 压力 有人知道怎么做吗?

  • 问题内容: 我正在尝试获得类似这样的功能的参考: 我有以下错误: 如何获得具有指定参数的功能? 问题答案: 由于有两个名称相同但签名不同的方法,因此您必须指定所需的方法: 或者(如@Antonio正确指出的): 如果您需要将类的实例作为第一个参数的咖喱函数,则可以以相同的方式进行,只有签名不同(将@Antonios注释与您的问题进行比较):

  • 我正在使用的数据库有许多具有相同列但(显然)具有不同表名的表(不是我设计的)。例如(这些是数据库表名): 有没有可能用JPA和Hibernate将这些映射到一个Java类实体?类的名称是,然后在使用它时传入例如,以便对象使用表? 还是只使用普通的、普通的Java对象来完成这样的任务更好? 谢谢你!

  • 问题内容: 以下代码可以正常工作。在两个不同的结构上操作并打印该结构的字段的两种方法: 在控制台中显示所需的输出: 现在 ,如果我以以下方式更改方法签名,则会出现编译错误。我只是将方法的接收者移动到方法的参数: 我什至无法编译程序: 问 :为什么 当 方法具有相同的名称和Arity 时 ,我可以在接收器中互换结构类型,而不能在参数中互换结构类型? 问题答案: 因为Go不支持在其参数类型上重载用户定

  • 我想从来自web服务的json数据填充微调器。我有一个名为“categoriesList”的主数组,其中包括名为“subcategories”的子数组,但这些数组具有相同的名称并包含数据对象。我想根据第一个微调器(即categoriesList)的选择填充子类别的第二个微调器。问题是,当我从第一个微调器(categoriesList)中选择一个项目时,第二个微调器将显示所有子数组,但我只需要在第二

  • 问题内容: 我在这里已经读到,在Java中,具有相同名称但不同类型的两个变量可以在同一范围内共存。我的意思是这个 但是所有的Java IDE都不允许这样的代码。我想知道这样的代码在语法上是否正确,或者只是IDE不允许这样的代码防止歧义。 无论如何,这是网站的摘录 “如果幸运的话,您也许能够重新编译Jad的输出。 但是,Java VM对于变量命名的规则比Java语言本身更为宽松。例如,一个有效的类文