Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用正则表达式解析JSON字段_Python_Regex_Json_Django - Fatal编程技术网

在python中使用正则表达式解析JSON字段

在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):

我正在编写一个测试函数,用于查看自动完成字段是否包含来自数据库的所有结果

自动完成字段通过创建项目的JSON列表从数据库返回一个列表

我想知道如何编写正确的正则表达式来查找我需要的所有项

tests.py:

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起初我也不知道该测试什么。当我刚开始工作时,我发现这非常有用: