我有一组看起来像这样的字符串:
[{"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
我该怎么做?
答案 0 :(得分:5)
正确使用任何JSON解析库,例如GSON或Jackson,并将其转换为Java Object。
注意:返回维护订单的java.util.LinkedHashMap
。
示例代码:
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
答案 1 :(得分:3)
答案 2 :(得分:3)
此字符串是JSON,因此您可以使用JSON解析器来执行此操作。
如果您正在寻找一种简单的方法来获取"tag"
的所有值,请使用此正则表达式并在Java中提取第1组。
"tag":"((?:[^"\\]|\\.)*)"
如果您要在Java中使用它,请双击它:
Pattern p = Pattern.compile("\"tag\":\"((?:[^\"\\\\]|\\\\.)*)\"");
答案 3 :(得分:0)
试试这个。匹配位于第一个捕获组
(?:"tag":"|\G(?!^))([^"]*)
答案 4 :(得分:0)
不要使用正则表达式来解析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"));
}