在python中使用正则表达式解析JSON字段
我正在编写一个测试函数,用于查看自动完成字段是否包含来自数据库的所有结果 自动完成字段通过创建项目的JSON列表从数据库返回一个列表 我想知道如何编写正确的正则表达式来查找我需要的所有项 tests.py:在python中使用正则表达式解析JSON字段,python,regex,json,django,Python,Regex,Json,Django,我正在编写一个测试函数,用于查看自动完成字段是否包含来自数据库的所有结果 自动完成字段通过创建项目的JSON列表从数据库返回一个列表 我想知道如何编写正确的正则表达式来查找我需要的所有项 tests.py: from django.test import TestCase import unittest import re import requests class TestBuilds(unittest.TestCase): def test_autoField_mobo(self):
from django.test import TestCase
import unittest
import re
import requests
class TestBuilds(unittest.TestCase):
def test_autoField_mobo(self):
'''
Test if all motherboards from database appear in autocomplete
'''
mobos_db = moboListing.objects.values_list('moboList', flat = True)
r = requests.get('localhost:8000/builds/autocomplete/ajax_lookup/moboListing?term=+')
# When user enters a space, request to server returns JSON format of motherboards at this url
num_mobos_db = len(mobos_db) # number of motherbaords in db
autocomplete = re.findall(r'u'value': u'(.*?)', str(r.json()) , re.DOTALL)
flag = False
error = """Check that all motherboards from DB really appears"""
for i in range(0, num_mobos_db):
if mobos_db[i] in autocomplete:
flag = True
else:
flag = False
self.assertTrue(flag, error)
我的问题是如何为JSON字符串编写正确的正则表达式,如下所示:
>>> str(r.json())
"[{u'pk': u'1', u'value': u' ASUS Motherboard '}, {u'pk': u'2', u'value': u' MSI Motherboard '}]"
我想从u'value':u''中收集所有主板名称,以便检查它们是否与数据库匹配,或者如果有办法计算JSON项的数量,我可以将其与数据库中主板的数量进行比较。为什么要将DICT列表转换为字符串以便对其进行解析?为什么不直接从dict中提取元素并验证它们呢?你不能用正则表达式解析JSON,除非你假设对象有固定的最大嵌套。但即使在这种情况下,也将非常困难。你为什么不直接使用json.loads并在字典和列表上操作呢?好的,谢谢,我将阅读json.loads并在这里报告。我可能不理解你的问题,但是像json.dumps、serialize和model.objects这样的核心函数都不需要tested@achabacha322起初我也不知道该测试什么。当我刚开始工作时,我发现这非常有用: