繁体   English   中英

Java提取字符串/标签?

[英]Java extract strings/tags?

我有一些看起来像这样的字符串:

[{"tag":"rat","score":0.7973},{"tag":"lion","score":0.7184},{"tag":"dog","score":0.2396},{"tag":"woof","score":0.1944},{"tag":"cat","score":0.1157}]

我想按顺序从字符串中打印以下内容:

rat
lion
dog
woof
cat

我怎样才能做到这一点?

正确使用任何JSON解析库(例如GSONJackson) ,并将其转换为Java Object。

注意:它返回维护顺序的java.util.LinkedHashMap

样例代码:

GSON

String jsonString="[{\"tag\":\"rat\",\"score\":0.7973},{\"tag\":\"lion\",\"score\":0.7184},{\"tag\":\"dog\",\"score\":0.2396},{\"tag\":\"woof\",\"score\":0.1944},{\"tag\":\"cat\",\"score\":0.1157}]";
Type type = new TypeToken<ArrayList<Map<String, String>>>() {}.getType();
ArrayList<Map<String, String>> data = new Gson().fromJson(jsonString, type);
for (Map<String, String> map : data) {
    System.out.println(map.get("tag"));
}

杰克逊

String jsonString="[{\"tag\":\"rat\",\"score\":0.7973},{\"tag\":\"lion\",\"score\":0.7184},{\"tag\":\"dog\",\"score\":0.2396},{\"tag\":\"woof\",\"score\":0.1944},{\"tag\":\"cat\",\"score\":0.1157}]";
TypeReference<ArrayList<Map<String, String>>> typeRef = new TypeReference<ArrayList<Map<String, String>>>() {};
ObjectMapper mapper = new ObjectMapper();
try {
    ArrayList<Map<String, String>> data = mapper.readValue(jsonString, typeRef);
    for (Map<String, String> map : data) {
        System.out.println(map.get("tag"));
    }
} catch (Exception e) {
    System.out.println("There might be some issue with the JSON string");
}

输出:

rat
lion
dog
woof
cat
    (?:.*?{"tag":)"(.*?)",.*?}

这将匹配所有必需的组。请参见演示

http://regex101.com/r/aN1bX5/1

该字符串是JSON,因此您可以使用JSON解析器执行此操作。

如果您正在寻找一种简单的方法来获取"tag"所有值,请使用此正则表达式并提取Java中的第1组。

"tag":"((?:[^"\\]|\\.)*)"

正则表达式可视化

Debuggex演示

如果要在Java中使用它,请两次转义:

Pattern p = Pattern.compile("\"tag\":\"((?:[^\"\\\\]|\\\\.)*)\"");

尝试这个。 比赛在第一个捕获组中

(?:"tag":"|\G(?!^))([^"]*)

不要使用正则表达式来解析JSON。 使用类似GSON或Jackson的库

JSONArray jsa = new JSONArray(jsonString);
for (int i = 0; i < jsa.length(); i++) {
    JSONObject json = jsa.getJSONObject(i);
    System.out.println(json.getString("tag"));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM