【问题标题】:Android Java Regex MatchAndroid Java 正则表达式匹配
【发布时间】:2012-08-20 20:56:56
【问题描述】:

我正在尝试拔出琴弦:

 [{"name":"John Doe Jr."},{"name2":"John Doe"}] & {"name":"John Doe"} 

来自以下 JSON 字符串中的有效负载:

{"to":"broadcast", "type":"50", "payload":[{"name":"John Doe Jr."},{"name2":"John Doe"}]}

{"to":"broadcast", "type":"50", "payload":{"name":"John Doe"}}

使用这个正则表达式代码:

Pattern pattern = Pattern.compile("\\{(.*?)\"payload\":\"(.*?)\"\\}\\}");

Matcher matcher = pattern.matcher(jsonString);

我得到一个 IllegalStateException: No successl match so far

我的正则表达式有什么问题?

另外我如何获得它找到的匹配数?

任何帮助将不胜感激。

【问题讨论】:

  • 您不想使用JSON parser 代替吗?
  • 我正在尝试从 InputStream 中获取有效负载 json 数组,然后我正在使用 JSON 解析器解析 JSONArray 和 JSONArray 中的 JSONObjects
  • 你不能只使用new JSONObject("your_js_string"),然后使用生成的JSONObject吗?
  • 我要做的就是提取有效负载字符串并将该字符串设置为 JSONArray 并使用 JSONArray 中的 Json 对象。这就是我想做的。我不想使用 JSON 解析器来获取数组。

标签: java android regex


【解决方案1】:

这应该可行:

String someJson ="{\"to\":\"broadcast\", \"type\":\"50\", \"payload\":[{\"name\":\"John Doe Jr.\"},{\"name2\":\"John Doe\"}]}";

Pattern p = Pattern.compile(".*?payload\":(.*)}");
Matcher m = p.matcher(someJson);
if (m.matches()) {
  String payload = m.group(1);
}

在此之后,有效负载将具有值 [{"name":"John Doe Jr."},{"name2":"John Doe"}] {"name":"John Doe"}

一些注意事项:

  • 此正则表达式仅在有效负载元素是您的 json 字符串中的最后一个 json 对象时才有效。
  • 正如其他人所提到的:使用 json api 执行此操作会更好(也更容易)(见下文)
  • 如果您可以控制 json 字符串,最好返回一个仅包含一个元素的数组,而不是直接返回该元素。因此,您无需编写额外的代码即可读取单个元素。

使用 Androids JSONObject 这可能看起来像这样:

JSONObject json = new JSONObject(someJson);
try {
  JSONArray payload = json.getJSONArray("payload");
} catch (Exception e) {
  // array conversion can fail for single object 
  JSONObject payload = json.getJSONObject("payload");
}

【讨论】:

    猜你喜欢
    • 2011-11-02
    • 2011-03-30
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2015-06-03
    相关资源
    最近更新 更多