java - 如何从无法转换为 Json 的字符串中提取值
问题描述
在处理 DialogFlow Response 对象时,我得到以下给定的字符串作为textPayload。如果这是一个 Json 字符串,我可以轻松地将其转换为 JSONObject,然后提取值。但是,无法将其转换为 Json 对象。如何获取此字符串中键的值?在Java中解析这个字符串的好方法是什么?
待处理字符串
Dialogflow Response : id: "XXXXXXXXXXXX"
lang: "en"
session_id: "XXXXX"
timestamp: "2020-04-26T16:38:26.162Z"
result {
source: "agent"
resolved_query: "Yes"
score: 1.0
parameters {
}
contexts {
name: "enaccaccountblocked-followup"
lifespan: 1
parameters {
}
}
metadata {
intent_id: "XXXXXXXXXXXX"
intent_name: "EN : ACC : Freezing Process - Yes"
end_conversation: true
webhook_used: "false"
webhook_for_slot_filling_used: "false"
is_fallback_intent: "false"
}
fulfillment {
speech: "Since you have been permanently blocked, please request to unblock your account"
messages {
lang: "en"
type {
number_value: 0.0
}
speech {
string_value: "Since you have been permanently blocked, please request to unblock your account."
}
}
}
}
status {
code: 200
error_type: "success"
}
解决方案
如果我理解正确,这里的问题是键没有引号,因此 JSON 解析器将拒绝它。
由于键都以带有一些空格的新行开头,并且都以冒号结尾:您可以使用正则表达式轻松解决此问题。
然后,您可以通过将其解析为 Map
Map<String, Object> map
= objectMapper.readValue(json, new TypeReference<Map<String,Object>>(){});
(但我假设你知道这一点)。