【问题标题】:How to get values from key如何从键中获取值
【发布时间】:2021-07-22 08:39:39
【问题描述】:

我试图通过这样写来保存 user_id 的值

String Stytch_user_id = jsonContent.getKeyValue("user_id");

但它说

The method getKeyValue(String) is undefined for the type String

如何正确存储 user_id 的值。 非常感谢您的建议。

    InputStream inputStream = http.getInputStream();
            String jsonContent = convert(inputStream, Charset.forName("UTF-8"));
            String Stytch_user_id = jsonContent.getKeyValue("user_id");

我拥有的 jsonContent 内部。

{
"method_id":"email-test-da81007a--aef293c89f17",
"request_id":"request-id-test-c8c5db947e5",
"status_code":200,
"user_id":"user-test-9848a7bb782eea7b"
}

这是我迄今为止的最新作品。

如果 (http.getResponseCode() == 200) {

        InputStream inputStream = http.getInputStream();
        String jsonContent = convert(inputStream, Charset.forName("UTF-8"));
        RicDoorLoginDao ricDoorLoginDao = new RicDoorLoginDao();
        ObjectMapper mapper = new ObjectMapper();
        
        try {
              JsonNode node = mapper.readTree(jsonContent);
              String Stytch_user_id = node.get("user_id").textValue();
              Object[] objects = getUserLogin(Stytch_user_id, "P0002","123456789", ricDoorLoginDao);
              
            } catch (JsonProcessingException e) {
              e.printStackTrace();
            }
        
    } else { 
        System.out.println("Stytch authentication failed");
    }

【问题讨论】:

  • convert()是什么方法?
  • 我感觉您实际上并没有在这里解析您的 JSON。如果您想正确阅读它,您很可能需要使用 JSON 解析库。我不确定你从哪里得到getKeyValue,但它绝对不是为标准String 定义的。

标签: java json hashmap


【解决方案1】:

你的代码有几个问题。

  1. 我不知道convert 是什么,但它确实听起来像是一个你需要抛弃的无用库;将输入流转换为字符串的能力已经存在于核心库中,并且不需要涉及具有错误命名方法的库。 new String(inputStream.readAllBytes(), StandardCharsets.UTF_8) 就是你要找的,所有的核心公共类。

  2. 您的代码也被破坏,因为它会泄漏资源。每当您打开资源时,请在 try-with-resources 块中执行此操作。不这样做意味着您将泄漏资源;你不能只在某个地方调用inputStream.close(),甚至是像convert 这样的本土方法,因为如果发生异常怎么办? try-with-resources 负责处理它。看起来像这样:

try (var inputStream = http.getInputStream()) {
   // code goes here.
}
  1. 字符串还不是 JSON。这只是..一个字符串。您需要先将该 JSON 解析为某种内容。

#3 有点笨拙。您有几个选择,但最适合 java 的静态类型性质的是编组的概念:

您为 JSON 中的每个元素定义一个类(通常称为“POJO”,它是“plain old java object”的缩写,如此类的实例是 POJO)。适当地键入该字段。然后使用一个库来获取你的类,获取 JSON,并使钉子适合孔。

Jackson 就是这样一个库。

查看this tutorial 了解更多信息。

是的,这是您需要包含的依赖项、需要使用的 API 和需要阅读的教程。 Java 是强类型的,而基于 javascript 的 JSON 不是。互操作并非易事。 Jackson 让它感觉很流畅,像 java 一样。

【讨论】:

  • 嗨,可以举个例子吗?当我输入 new String(inputStream.readAllBytes(), StandardCharsets.UTF_8) 时,我得到 inputStream 无法解析。
  • @nananaka 但是inputStream 是您粘贴的 sn-p 中的一个变量!
  • 嗨,我在问题中添加了我的最新代码。好看吗??
  • @nananaka 它没有涵盖我提到的任何的事情,所以,不是真的,不:(
  • 我不确定如何处理 try (var inputStream = http.getInputStream()) { // 代码放在这里。 }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 2010-11-25
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多