java - 如何从键中获取值
问题描述
我试图通过这样写来保存 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"
}
这是我迄今为止的最新作品。
if (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
,但它肯定听起来像是一个你需要抛弃的无用库;将输入流转换为字符串的能力已经存在于核心库中,并且不需要涉及具有错误命名方法的库。new String(inputStream.readAllBytes(), StandardCharsets.UTF_8)
就是你要找的,所有核心的公共类。您的代码也被破坏,因为它泄漏了资源。每当您打开资源时,请在 try-with-resources 块中执行此操作。不这样做意味着您将泄漏资源;您不能只调用
inputStream.close()
某个地方,甚至不能调用类似的本地方法convert
,因为如果发生异常怎么办?try-with-resources 负责处理它。看起来像这样:
try (var inputStream = http.getInputStream()) {
// code goes here.
}
- 字符串还不是 JSON。这只是..一个字符串。您需要先将该 JSON 解析为某些内容。
#3有点笨拙。您有几个选择,但最适合 java 的静态类型特性的是编组的概念:
您为 JSON 中的每个元素定义一个类(通常称为“POJO”,它是“plain old java object”的缩写,如此类的实例是 POJO)。适当地键入该字段。然后使用一个库来获取您的课程,获取 JSON,并使钉子适合孔。
杰克逊就是这样一个图书馆。
查看本教程以获取更多信息。
是的,这是您需要包含的依赖项、您需要使用的 API 以及您需要阅读的教程。Java 是强类型的,而基于 javascript 的 JSON 不是。互操作并非易事。Jackson 让它感觉很流畅,像 java 一样。
推荐阅读
- laravel-5 - Laravel:尝试在完整的 laravel 应用程序中获取 url(带前缀)
- html - 更改网格系统中的字体大小
- swift - 在 Swift 5 中从 AWS S3 下载文本文件
- java - Android 代码在开发中有效,但在 Play 商店中失败
- spring - 通过第三方应用spring boot(Eureka-client)发现eureka
- php - 如何将excel中的空白值插入具有唯一键的列中并将其输入为NULL?
- php - 如何访问多个对象数据数组?
- jira - 如何获得 Katalon 执行结果?
- angular - 页面加载时间统计
- typescript - 当组件具有自定义构造函数时,Vue 存储未定义