teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記2

2019/08/09 09:48

投稿

mokemokechicken
mokemokechicken

スコア948

answer CHANGED
@@ -32,4 +32,64 @@
32
32
  result = json.loads(json_str.strip())
33
33
  print(result["name"]) # > aaa
34
34
  print(result["id"]) # > iii
35
+ ```
36
+
37
+ ----------
38
+
39
+ ■ 追記2
40
+
41
+ 2つ目の例だと、 `name`, `key_number` が出現するのが1箇所だけなので、なんとか正規表現で抜き出すのが良さそうですね。
42
+
43
+ ```
44
+ ####### 入力
45
+
46
+ js = '''window.content_Data_k = {
47
+ "config": {
48
+ "token": "dsf78sadf9sdfasd7s9df7safd6",
49
+ "seer": null,
50
+ "seerId": null
51
+ },
52
+ "country_code": "JP",
53
+ "language_code": "ja",
54
+ "locale": "ja_JP",
55
+ "index_data": {
56
+ "contentPage": [{
57
+ "logging_page_id": "contentPage_728394298",
58
+ "show_suggested_contents": false,
59
+ "graphql": {
60
+ "user": {
61
+ "name": "aaa",
62
+ "block": false,
63
+ "country_block": false,
64
+ "expect_url": null,
65
+ "expect_url_linkshimmed": null,
66
+ "key_number": {
67
+ "count": 13
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
74
+ '''
75
+
76
+ ####### 処理
77
+
78
+ import re
79
+
80
+ pickup_name = re.compile(r'"name"\s*:\s*"([^"]*)"')
81
+ pickup_key_number = re.compile(r'"key_number"\s*:\s*{\s*"count"\s*:\s*([\d]+)')
82
+
83
+ name_matcher = pickup_name.search(js)
84
+ name = None
85
+ if name_matcher:
86
+ name = name_matcher.group(1)
87
+
88
+ key_number_matcher = pickup_key_number.search(js)
89
+ key_number = None
90
+ if key_number_matcher:
91
+ key_number = key_number_matcher.group(1)
92
+
93
+ print(f"name={name}, key_number={key_number}")
94
+ # name=aaa, key_number=13
35
95
  ```

2

a.split("=", 2) ---> a.split("=", 1) に修正

2019/08/09 09:48

投稿

mokemokechicken
mokemokechicken

スコア948

answer CHANGED
@@ -27,7 +27,7 @@
27
27
 
28
28
  a = 'k = {"name":"aaa","id":"iii"}'
29
29
 
30
- _, json_str = a.split("=", 2)
30
+ _, json_str = a.split("=", 1)
31
31
 
32
32
  result = json.loads(json_str.strip())
33
33
  print(result["name"]) # > aaa

1

追記1

2019/08/08 22:43

投稿

mokemokechicken
mokemokechicken

スコア948

answer CHANGED
@@ -11,4 +11,25 @@
11
11
  result = json.loads(a)
12
12
  print(result["name"]) # > aaa
13
13
  print(result["id"]) # > iii
14
+ ```
15
+
16
+ --------------
17
+
18
+ ■ 追記1
19
+
20
+ `a = 'k = {"name":"aaa","id":"iii"}'` が入力の場合なら
21
+ 考え方としては「なんとかして `{"name"...}` のところを抽出すれば良い」という気がします。
22
+ 正規表現を使うか、単純に split を使うか、最初の `{` の位置を探すか、色々方法はありそうですが、
23
+ `k = {"name"....}` の `k = `の辺りが変化しなさそうなのであれば、以下のようなのでもいいかもしれないです。
24
+
25
+ ```python
26
+ import json
27
+
28
+ a = 'k = {"name":"aaa","id":"iii"}'
29
+
30
+ _, json_str = a.split("=", 2)
31
+
32
+ result = json.loads(json_str.strip())
33
+ print(result["name"]) # > aaa
34
+ print(result["id"]) # > iii
14
35
  ```