Springのタグがついているので、Jacksonの採用には抵抗なしという想定で。
正規表現でがんばるよりも、JSON部分を取り出せるのであれば、あとはJacksonに任せたほうがいいのでは?
MapやListにしてしまえば、あとはいかようにも。
java
1import com.fasterxml.jackson.databind.ObjectMapper;
2import java.util.List;
3import java.util.Map;
4
5public class HogeJson {
6 public static void main(final String[] args) throws Exception {
7 final ObjectMapper objectMapper = new ObjectMapper();
8
9 final Map<Object, Object> result = objectMapper.readValue(jsonString, Map.class);
10 System.out.println("---- result --------");
11 System.out.println(result);
12
13 final List<Object> result2 = objectMapper.readValue(jsonString2, List.class);
14 System.out.println("---- result2 --------");
15 System.out.println(result2);
16 }
17
18 // ---- result --------
19 // {@context=http://schema.org, @type=BreadcrumbList, itemListElement=[{@type=ListItem, position=1, item={@id=URL, name=TOP}}, {@type=ListItem, position=2, item={@id=URL, name=第二階層}}, {@type=ListItem, position=3, item={@id=URL, name=第三階層}}]}
20 // ---- result2 --------
21 // [{@context=http://schema.org, @type=LocalBusiness, name=Enazeal株式会社, telephone=0800-200-9680, address=〒150-0002 東京都渋谷区渋谷1丁目17番2号 ヒューリック渋谷宮下公園ビル 7F(受付)・8F}, {@context=http://schema.org, @type=Product, name=顔認証万引き防止システムLYKAON, brand=LYKAON, description=高齢者や要介護者の徘徊対策に。顔認証技術を使った徘徊・無断外出防止システム。, logo=http://www.facial-lykaon.com/image/logo.jpg, url=http://www.face-lykaon.com/, image=http://www.face-lykaon.com/image/jacket.jpg, manufacturer=Enazeal株式会社}]
22
23
24 static final String jsonString = "\n" +
25 "{\n" +
26 " \"@context\": \"http://schema.org\",\n" +
27 " \"@type\": \"BreadcrumbList\",\n" +
28 " \"itemListElement\": \n" +
29 " [\n" +
30 " {\n" +
31 " \"@type\": \"ListItem\",\n" +
32 " \"position\": 1,\n" +
33 " \"item\":{\n" +
34 " \"@id\": \"URL\",\n" +
35 " \"name\": \"TOP\"\n" +
36 " }\n" +
37 " }, {\n" +
38 " \"@type\": \"ListItem\",\n" +
39 " \"position\": 2,\n" +
40 " \"item\":{\n" +
41 " \"@id\": \"URL\",\n" +
42 " \"name\":\"第二階層\"\n" +
43 " }\n" +
44 " }, {\n" +
45 " \"@type\": \"ListItem\",\n" +
46 " \"position\": 3,\n" +
47 " \"item\":{\n" +
48 " \"@id\": \"URL\",\n" +
49 " \"name\": \"第三階層\"\n" +
50 " }\n" +
51 " }\n" +
52 " ]\n" +
53 "}";
54
55 static final String jsonString2 = "[\n" +
56 " {\n" +
57 " \"@context\": \"http://schema.org\",\n" +
58 " \"@type\": \"LocalBusiness\",\n" +
59 " \"name\": \"Enazeal株式会社\",\n" +
60 " \"telephone\": \"0800-200-9680\",\n" +
61 " \"address\": \"〒150-0002 東京都渋谷区渋谷1丁目17番2号 ヒューリック渋谷宮下公園ビル 7F(受付)・8F\"\n" +
62 " },\n" +
63 " {\n" +
64 " \"@context\": \"http://schema.org\",\n" +
65 " \"@type\": \"Product\",\n" +
66 " \"name\": \"顔認証万引き防止システムLYKAON\",\n" +
67 " \"brand\": \"LYKAON\",\n" +
68 " \"description\": \"高齢者や要介護者の徘徊対策に。顔認証技術を使った徘徊・無断外出防止システム。\",\n" +
69 " \"logo\": \"http://www.facial-lykaon.com/image/logo.jpg\",\n" +
70 " \"url\": \"http://www.face-lykaon.com/\",\n" +
71 " \"image\": \"http://www.face-lykaon.com/image/jacket.jpg\",\n" +
72 " \"manufacturer\": \"Enazeal株式会社\"\n" +
73 " }\n" +
74 "]";
75}
データのフォーマットが決まっているのであれば、Itemクラスのようなものを定義すると、List/Mapのまま扱うよりも楽ちんかも。
java
1import com.fasterxml.jackson.annotation.JsonProperty;
2import com.fasterxml.jackson.core.type.TypeReference;
3import com.fasterxml.jackson.databind.ObjectMapper;
4import java.util.List;
5
6public class HogeJson2 {
7
8 public static void main(final String[] args) throws Exception {
9 final ObjectMapper objectMapper = new ObjectMapper();
10 final List<Item> result3 = objectMapper.readValue(jsonString3, new TypeReference<List<Item>>() {
11 });
12 System.out.println("---- result3 --------");
13 System.out.println(result3);
14
15 // ---- result3 --------
16 // [item: <@id:(URL), name:(TOP)>, item: <@id:(URL), name:(第二階層)>, item: <@id:(URL), name:(第三階層)>]
17 }
18
19 public static class Item {
20 @JsonProperty("@id")
21 public String id;
22 public String name;
23
24 @Override
25 public String toString() {
26 return String.format("item: <@id:(%s), name:(%s)>", id, name);
27 }
28 }
29
30 static final String jsonString3 = " [\n" +
31 " {\n" +
32 " \"@id\": \"URL\",\n" +
33 " \"name\": \"TOP\"\n" +
34 " },\n" +
35 " {\n" +
36 " \"@id\": \"URL\",\n" +
37 " \"name\":\"第二階層\"\n" +
38 " },\n" +
39 " {\n" +
40 " \"@id\": \"URL\",\n" +
41 " \"name\": \"第三階層\"\n" +
42 " }\n" +
43 " ]";
44}
45
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/22 05:19