Python-Json Parser

时间:2013-11-15 10:56:54

标签: python json

我正在尝试使用以下规则实现python Json解析器:


规则1:

JSON数据对象始终以花括号开头,以花括号结尾。 {}

规则2:

所有数据均以

的形式表示

“的字符串”:值

其中值可以是以下任何一项:

  • 字符串
  • 布尔
  • 另一个json

规则3:

形成字符串的规则(左侧为红色)与大多数编程语言中的变量规则类似。
*它们可以是字母数字,但应始终以字母开头 *他们是区分大小写的 *除下划线外,它们不能包含特殊字符。

我已经完成了它并完成了除“另一个json”之外的所有条件。嘿是我的代码

import re
import string
class parser(object):

    fp=open('jsondata.txt','r')
    str=fp.read()
    def __init__(self):
        print "Name of the file Opened is :",self.fp.name 
        print "Contents of the file :\n",self.str
    def rule1(self,str):

        if self.str[:1].startswith('{'):
            if self.str[:-1].endswith('}'):
                print "RULE 1\n",
                print "first character is '{' last character is '} : passed rule1\n"
        else:
            print "Not a JSON data"
    def splitdata(self):
        self.str=self.str[1:]
        self.str=self.str[:-2]
        print self.str
        #Storing the words of string in a list
        self.list1=[]
        self.list1=re.split(',',self.str)
        self.list2=[]
        self.list3=[]
        for i in self.list1:
            self.list2=list(re.split(':',i))
            self.list3.extend(list(self.list2))
        self.left_list=[]
        self.right_list=[]
        self.i=0
        self.left_list=list([self.list3[i] for i in range(len(self.list3)) if i % 2 == 0])
        self.right_list=list([self.list3[i] for i in range(len(self.list3)) if i % 2 == 1])
        print "DATA SPLIT"
        print "Left elements of the json data:",self.left_list
        print "Right elements of the json data:",self.right_list,"\n"

    def left_parse(self):

        """we gona check "This part of the string":"This part will be checked in next function"\
        Conditions imposed on left part of string:\
        1.starts and ends with ""\
        2.Starts with Alphabet\
        3.Contains No special characters except unserscore _""" 

        for i in range(len(self.left_list)):
            self.str1=self.left_list[i]
            if self.str1.startswith('"') and self.str1.endswith('"')\
                and self.str1[1].isalpha():
                self.str2=self.str1[1:]
                self.str3=self.str2[:-1]
                print "Left side content:",self.str3
                print  "Status : Valid"if re.match("^[a-zA-Z0-9_]*$", self.str3) else "Invalid"
            else:
                print "Left side content:",self.str1
                print "Status: Invalid" 






obj=parser()
obj.rule1(str)
obj.splitdata()
obj.left_parse()    

现在问题是当我试图检查我的right_list时,每当我得到另一个json数据时,输出就会变得疯狂。谁能帮帮我吗。我基于分裂(逗号和冒号)构建了left_list和right_list 在json中解析json时,这个逻辑看起来不起作用......

0 个答案:

没有答案