iT邦幫忙

0

Python讀取json檔後找尋符合條件的字串並輸出

Python讀取json檔後找尋符合條件的字串並輸出所屬group https://ithelp.ithome.com.tw/upload/images/20190723/20119186T23VvNRsJC.png
例如需要找到SmoothScroll這個字串並輸出為 group 1,目前有試過使用
for F in data:
if F=='SmoothScroll':
print('Group 1')
break
else:
print("no")!
但無法達到所要的需求,有進行爬文但沒有搜尋到方法,還請各位大大指點
以下是json檔

{'group 1': [{'index': 8,
   'API name': 'RegOpenKey',
   'params': {'hKey': 'HKEY_CURRENT_USER\\Control Panel\\Desktop'},
   'action': 'Read'},
  {'index': 9,
   'API name': 'RegQueryValue',
   'params': {'hKey': 'HKEY_CURRENT_USER\\Control Panel\\Desktop\\SmoothScroll'},
   'action': 'Read'},
  {'index': 10,
   'API name': 'RegCloseKey',
   'params': {'hKey': 'HKEY_CURRENT_USER\\Control Panel\\Desktop'},
   'action': 'Close'},
  {'index': 54,
   'API name': 'RegOpenKey',
   'params': {'hKey': 'HKEY_CURRENT_USER\\Control Panel\\Desktop'},
   'action': 'Read'},
  {'index': 55,
   'API name': 'RegQueryValue',
   'params': {'hKey': 'HKEY_CURRENT_USER\\Control Panel\\Desktop\\SmoothScroll'},
   'action': 'Read'},
  {'index': 56,
   'API name': 'RegCloseKey',
   'params': {'hKey': 'HKEY_CURRENT_USER\\Control Panel\\Desktop'},
   'action': 'Close'}]}
froce iT邦大師 6 級 ‧ 2019-07-23 15:16:25 檢舉
丟個測試的json上來,麻煩用code block...
這個要用filter才好做。
不好意思 請問這樣放可以嗎

1 個回答

2
froce
iT邦大師 6 級 ‧ 2019-07-23 16:35:31
最佳解答
import json

json_str = r"""
{
	"group 1": [{
			"index": 8,
			"API name": "RegOpenKey",
			"params": {
				"hKey": "HKEY_CURRENT_USER\\Control Panel\\Desktop"
			},
			"action": "Read"
		},
		{
			"index": 9,
			"API name": "RegQueryValue",
			"params": {
				"hKey": "HKEY_CURRENT_USER\\Control Panel\\Desktop\\SmoothScroll"
			},
			"action": "Read"
		},
		{
			"index": 10,
			"API name": "RegCloseKey",
			"params": {
				"hKey": "HKEY_CURRENT_USER\\Control Panel\\Desktop"
			},
			"action": "Close"
		},
		{
			"index": 54,
			"API name": "RegOpenKey",
			"params": {
				"hKey": "HKEY_CURRENT_USER\\Control Panel\\Desktop"
			},
			"action": "Read"
		},
		{
			"index": 55,
			"API name": "RegQueryValue",
			"params": {
				"hKey": "HKEY_CURRENT_USER\\Control Panel\\Desktop\\SmoothScroll"
			},
			"action": "Read"
		},
		{
			"index": 56,
			"API name": "RegCloseKey",
			"params": {
				"hKey": "HKEY_CURRENT_USER\\Control Panel\\Desktop"
			},
			"action": "Close"
		}
	],
	"group 2": [{
		"index": 8,
		"API name": "RegOpenKey",
		"params": {
			"hKey": "HKEY_CURRENT_USER\\Control Panel\\Desktop"
		},
		"action": "Read"
	}]
}"""

data = json.loads(json_str)

def haveKeyWord(l, keyword):
	_ = list(filter(lambda x: keyword in x['params']['hKey'].split("\\"), l))
	return True if _ else False

result = dict(filter(lambda x:haveKeyWord(x[1], "SmoothScroll"), data.items()))

print(result.keys())

https://ideone.com/45SQL0

幫你改了JSON,並且多加了一組測試的 group 2

看更多先前的回應...收起先前的回應...

真是太感謝了,謝謝大神

想再請教一個問題,json的括號縮排位置有很大的影響嗎?

player iT邦大師 1 級 ‧ 2019-07-23 22:20:30 檢舉

別縮排, 縮排是給人看的, 瀏覽器解析 json 根本不需要縮排, 你弄縮排只是多消耗WebServer的流量而已, 沒必要

froce iT邦大師 6 級 ‧ 2019-07-24 06:57:55 檢舉

縮排是因為要把你丟在上面的測試資料轉成正式json,丟到工具才自動縮排的,json.loads不能單引號來寫json。
實際使用不需要。

我要發表回答

立即登入回答