我需要一些帮助来创建一个正则表达式。 String
值为:
{"meta":[{"this_id":"111111"},{"this_id":"222222"},{"this_id":"333333"}],"type":"Account"}
我想创建一个包含所有ID的列表,因此element[0]
将为111111,element[1]
将为222222。我还想至少能够隔离类型并将其设置为String。
我可以收到一些帮助吗?我试着做
String[] tokens = stringToBreakUp.split(":");
然后我只关注该列表中第二个元素之后的所有标记。我不知道如何根据密钥搜索列表。我想我需要某种关键。但我是做这些事的新手。
答案 0 :(得分:3)
只需使用\\d+
即可获取所有数字。查看demo
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(yourString);
while (m.find()) {
// print m.group() to get all ids
}
答案 1 :(得分:1)
使用任何JSON解析库,例如GSON或Jackson,并将其转换为Java Object。
使用GSON
库的示例代码:
Type type = new TypeToken<Map<String, Object>>() {}.getType();
Map<String, Object> data = new Gson().fromJson(jsonString, type);
// just iterate the map and get the desired value
使用Jackson
库的示例代码:
JSONObject obj = new JSONObject(s);
JSONArray jsonArray = obj.getJSONArray("meta");
for (int i = 0; i < jsonArray.length(); i++) {
System.out.println(jsonArray.getJSONObject(i).get("this_id"));
}
输出:
111111
222222
333333
答案 2 :(得分:1)
我绝对同意RegEx不是解析JSON的合适工具,但是这个简单的测试可以帮助你做到这一点。
import org.testng.annotations.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static org.testng.Assert.assertEquals;
public class SimpleTest {
@Test
public void test() throws Exception {
String str = "{\"meta\":[{\"this_id\":\"111111\"},{\"this_id\":\"222222\"},{\"this_id\":\"333333\"}],\"type\":\"Account\"}";
Pattern idPattern = Pattern.compile("\\{\"this_id\"\\s*\\:\\s*\"(\\d+)\"\\}");
Matcher idMatcher = idPattern.matcher(str);
Collection<String> ids = new ArrayList<>();
while (idMatcher.find()) {
ids.add(idMatcher.group(1));
}
assertEquals(Arrays.asList("111111", "222222", "333333"), ids);
Pattern typePattern = Pattern.compile("\"type\"\\s*\\:\\s*\"([^\"]+)\"");
Matcher typeMatcher = typePattern.matcher(str);
String type = typeMatcher.find() ? typeMatcher.group(1) : null;
assertEquals("Account", type);
}
}