当前位置: 首页 > 知识库问答 >
问题:

如何使用GSON序列化json字符串并从中提取键和值?

端木望
2023-03-14

我试图使用GSON解析我的JSON字符串,从一个简单的JSON字符串中提取key:value对,并将其加载到映射中。到目前为止,我使用org.json.simple.parser.jsonParser来完成该操作。现在我正在尝试使用GSON做同样的事情。

下面是我的json字符串JSONStringA-

{"description":"Hello World.","hostname":"abc1029.dc3.host.com","ipaddress":"100.671.1921.219","hostid":"/tt/rt/v2/dc3/111","file_timestamp":"20140724","software_version":"v13","commit_hash":"abcdefg"}

现在我需要序列化上面的JSON字符串,从JSON字符串中提取以下字段,并将其作为键值对放在map m中。在映射中,它应该是description作为键,hello world作为值。其他人也是如此。

public static final Set<String> MAPPING_FIELDS = new HashSet<String>(Arrays.asList(
        "description", "hostname", "ipaddress", "hostid", "software_version"));

private final static JSONParser parser = new JSONParser();


parseJSONData(jsonstringA, MAPPING_FIELDS);

public Map<String, String> parseJSONData(String jsonStr, Set<String> listOfFields) {
    Map<String, String> m = new HashMap<String, String>();
    try {
        Object obj = parser.parse(jsonStr);
        org.json.simple.JSONObject jsonObject = (org.json.simple.JSONObject) obj;
        if (jsonObject != null) {
            for (String field : listOfFields) {
                String value = (String) jsonObject.get(field);
                m.put(field, value);
            }
        }
    } catch (ParseException e) {
        // log exception here
    }
    return m;
}

我在这里如何使用GSON来做同样的事情?

共有1个答案

段干庆
2023-03-14

这很简单。只需创建一个POJO,该POJO具有与JSON字符串中使用的变量相同的变量。

在GSON#FromJSON的Java文档中查看(阅读器,键入)

示例代码:

class ClientDetail {
    private String description;
    private String hostname;
    private String ipaddress;
    private String hostid;
    private String file_timestamp;;
    private String software_version;
    private String commit_hash;
    // getter & setter
}

BufferedReader reader = new BufferedReader(new FileReader(new File("json.txt")));
ClientDetail data = new Gson().fromJson(reader, ClientDetail.class);

您可以将其转换为map,也可以使用TypeToken将其转换为预期的类型。

示例代码:

BufferedReader reader = new BufferedReader(new FileReader(new File("json.txt")));
Type type = new TypeToken<Map<String, String>>() {}.getType();
Map<String, String> data = new Gson().fromJson(reader, type);
 类似资料:
  • 我需要得到这个json字符串的Works数组: 我试试这个: 但是不要让任何人。。怎么了? PD:Work是一个具有价格、代码和名称值的类。

  • 问题内容: 所有,我都有以下输出/字符串(它是JIRA API的响应): 我用于遍历元素并获取值。我在下面的“嵌套对象”示例中编写了类 http://www.javacreed.com/gson-deserialiser- example/ 我能够获得到第二级的元素值。例如:在此级别之前,我能够获得的值以及其他值。我如何获得的价值? 我应该如何构造我的解串器和类。请协助。谢谢。 问题答案: 试试这

  • 问题内容: 我试图解析JSON字符串“ {‘test’:‘100.00’}”并使用GSON库获取值:100.00。我的代码如下所示: 我的结果看起来像这样:“ 100.00”,但是我只需要100.00(不带引号)即可。如何归档? 问题答案:

  • 问题内容: 我的下面的代码当机(调试错误!R6010 abort()已被调用)。你能帮助我吗?我也想知道如何从字符串值初始化json对象。 问题答案: 您好,这很简单: 1-您需要一个CPP JSON值对象(Json :: Value)来存储数据 2-使用Json Reader(Json :: Reader)读取JSON字符串并解析为JSON对象 3-做你的东西:) 这是执行这些步骤的简单代码:

  • 我的后端使用Springboot和Gson。我有这两个类的多对多关系: 订单类 产品类别 这是我用来向restendpoint提供数据的服务 以下是回应: 我的目标是反序列化/转义String属性。 我尝试过创建一个类并使用注释,但据我所知,当您需要为反序列化提供自定义行为时使用此注释,我示例中的JSON字符串非常简单,我不需要任何特定的逻辑。

  • 问题内容: 我有数据类/表“ User”,其中有“ preferences”列 首选项类型为TEXT,我在其中存储JSON。 所以价值是 如何使用一些注释将其包装起来,以便像 或无需包装到数据对象中 我想可能会有一些Jackson注释可以添加到字段中,例如 我对JPA相当陌生,文档非常丰富。 我相信我的情况很普遍。谁能举任何例子? 问题答案: 老实说,我认为最好的解决方案是为属性创建一个单独的表(