首页 > 解决方案 > 如何从无法转换为 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"
}

标签: javajsonstring

解决方案


如果我理解正确,这里的问题是键没有引号,因此 JSON 解析器将拒绝它。

由于键都以带有一些空格的新行开头,并且都以冒号结尾:您可以使用正则表达式轻松解决此问题。

请参阅如何在没有双引号的情况下修复 JSON 键值?

然后,您可以通过将其解析为 Map

Map<String, Object> map 
  = objectMapper.readValue(json, new TypeReference<Map<String,Object>>(){});

(但我假设你知道这一点)。


推荐阅读