java - 使用java访问JSON属性名称

标签 java json

我正在研究一种解析 JSON 文件并收集其内容以在其他地方使用的方法。我目前有一个工作示例如下:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class testJSONParser {
    public static void main(String[] args) throws Exception {
        List<Map<String, String>> jsonArray = new ArrayList<Map<String, String>>();

        BufferedReader br = new BufferedReader(new FileReader("json.txt"));

        try {
            String line = br.readLine();

            while (line != null) {
                JSONObject jsonObject = (JSONObject)new JSONParser().parse(line);

                Map<String, String> currentLineMap = new HashMap<String, String>();

                currentLineMap.put("country", jsonObject.get("country").toString());
                currentLineMap.put("size", jsonObject.get("size").toString());
                currentLineMap.put("capital", jsonObject.get("capital").toString());

                jsonArray.add(currentLineMap);

                line = br.readLine();
            }
            } catch (FileNotFoundException fnfe) {
                fnfe.printStackTrace();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                br.close();
            };
        }
    }
}

我正在使用 json simple 库来解析传入的 JSON 字符串。

这是已解析文件中的示例字符串。

{"**country**":"Canada","**size**":"9,564,380","**capital**":"Ottawa"}

我的问题是如何获取这段代码,并使 put 方法能够动态分配给相应的 Map。这是我目前拥有的:

for (int i = 0; i < jsonObject.size(); i++) {
     currentLineMap.put(jsonObject.???.toString(), jsonObject.get(i).toString());
}

这个???部分是我被难住的地方。获取当前 JSON 行的值非常简单。但如何获取属性值(在 JSON 字符串示例中以粗体突出显示)却让我困惑。是否有我可以调用这个我不熟悉的对象的方法?一种不同的、更好的方式来迭代这个问题?或者我从一开始就完全在做这件事?

最佳答案

在 JSON.org 引用实现中,您可以执行以下操作:

for (String key : JSONObject.getNames(jsonObject))
{
    map.put(key, jsonObject.get(key));
}

在简单的 JSON 中,你会这样做:

for (Object keyObject : jsonObject.keySet())
{
    String key = (String)keyObject;
    map.put(key, (String)jsonObject.get(key));
}

这应该可以解决问题。

关于java - 使用java访问JSON属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17012955/

相关文章:

java - 如何用java程序制作层次结构的Json结构

ios - Json转换问题 : invalid characters found

android - 使用 retrofit-gson 解析 JSON?

java - 将 AOP 功能添加到 Spring 项目后,未找到合格的 Bean 错误

java - 如何在 Spring 中定义 List bean?

java - Matcher.appendReplacement 用文字文本

python - 如何用 Pandas 读取json文件?

ios - 在 UICollectionView 中解析本地 JSON 文件

jquery - Controller 的 Json() 方法不返回数组

java - 在一个线程上初始化的jmethodID可以在另一个线程中使用吗?