Exemple #1
0
def stringify(scan, obj):
    if isinstance(obj, space.Dict):
        scan.left().text(u"{").blank(u"", scan.indent)
        more = False
        if scan.sort_keys:
            pairs = []
            for key, value in obj.data.iteritems():
                if not isinstance(key, String):
                    raise unwind(LError(
                        u"json supports only strings as keys: "
                        + key.repr()))
                pairs.append((key, value))
            sorter = JSONKeySort(pairs, len(pairs))
            sorter.sort()
            for key, value in sorter.list:
                if more:
                    scan.text(u",").blank(u" ", scan.indent)
                scan.left()
                scan.text(escape_string(key.string)+u': ')
                stringify(scan, value)
                scan.right()
                more = True
        else:
            for key, value in obj.data.iteritems():
                if not isinstance(key, String):
                    raise unwind(LError(
                        u"json supports only strings as keys: "
                        + key.repr()))
                if more:
                    scan.text(u",").blank(u" ", scan.indent)
                scan.left()
                scan.text(escape_string(key.string)+u': ')
                stringify(scan, value)
                scan.right()
                more = True
        scan.blank(u"", 0).text(u"}").right()
    elif isinstance(obj, space.List):
        scan.left().text(u"[").blank(u"", scan.indent)
        more = False
        for item in obj.contents:
            if more:
                scan.text(u",").blank(u" ", scan.indent)
            stringify(scan, item)
            more = True
        scan.blank(u"", 0).text(u"]").right()
    elif isinstance(obj, space.String):
        scan.text(escape_string(obj.string))
    elif isinstance(obj, space.Integer):
        scan.text(numbers.integer_to_string(obj.value, 10))
    elif isinstance(obj, space.Float):
        scan.text(numbers.float_to_string(obj.number))
    elif obj is space.null:
        scan.text(u"null")
    elif obj is space.true:
        scan.text(u"true")
    elif obj is space.false:
        scan.text(u"false")
    else:
        raise unwind(LError(u"no handler for: " + obj.repr()))
Exemple #2
0
def stringify(scan, obj):
    if isinstance(obj, space.Dict):
        scan.left().text(u"{").blank(u"", scan.indent)
        more = False
        if scan.sort_keys:
            pairs = []
            for key, value in obj.data.iteritems():
                if not isinstance(key, String):
                    raise unwind(
                        LError(u"json supports only strings as keys: " +
                               key.repr()))
                pairs.append((key, value))
            sorter = JSONKeySort(pairs, len(pairs))
            sorter.sort()
            for key, value in sorter.list:
                if more:
                    scan.text(u",").blank(u" ", scan.indent)
                scan.left()
                scan.text(escape_string(key.string) + u': ')
                stringify(scan, value)
                scan.right()
                more = True
        else:
            for key, value in obj.data.iteritems():
                if not isinstance(key, String):
                    raise unwind(
                        LError(u"json supports only strings as keys: " +
                               key.repr()))
                if more:
                    scan.text(u",").blank(u" ", scan.indent)
                scan.left()
                scan.text(escape_string(key.string) + u': ')
                stringify(scan, value)
                scan.right()
                more = True
        scan.blank(u"", 0).text(u"}").right()
    elif isinstance(obj, space.List):
        scan.left().text(u"[").blank(u"", scan.indent)
        more = False
        for item in obj.contents:
            if more:
                scan.text(u",").blank(u" ", scan.indent)
            stringify(scan, item)
            more = True
        scan.blank(u"", 0).text(u"]").right()
    elif isinstance(obj, space.String):
        scan.text(escape_string(obj.string))
    elif isinstance(obj, space.Integer):
        scan.text(numbers.integer_to_string(obj.value, 10))
    elif isinstance(obj, space.Float):
        scan.text(numbers.float_to_string(obj.number))
    elif obj is space.null:
        scan.text(u"null")
    elif obj is space.true:
        scan.text(u"true")
    elif obj is space.false:
        scan.text(u"false")
    else:
        raise unwind(LError(u"no handler for: " + obj.repr()))
Exemple #3
0
def quick_stringify(ub, obj):
    if isinstance(obj, space.Dict):
        ub.append(u"{")
        more = False
        for key, value in obj.data.iteritems():
            if not isinstance(key, String):
                raise unwind(
                    LError(u"json supports only strings as keys: " +
                           key.repr()))
            if more:
                ub.append(u",")
            ub.append(escape_string(key.string))
            ub.append(u':')
            quick_stringify(ub, value)
            more = True
        ub.append(u"}")
    elif isinstance(obj, space.List):
        ub.append(u"[")
        more = False
        for item in obj.contents:
            if more:
                ub.append(u",")
            quick_stringify(ub, item)
            more = True
        ub.append(u"]")
    elif isinstance(obj, space.String):
        ub.append(escape_string(obj.string))
    elif isinstance(obj, space.Integer):
        ub.append(numbers.integer_to_string(obj.value, 10))
    elif isinstance(obj, space.Float):
        ub.append(numbers.float_to_string(obj.number))
    elif obj is space.null:
        ub.append(u"null")
    elif obj is space.true:
        ub.append(u"true")
    elif obj is space.false:
        ub.append(u"false")
    else:
        raise unwind(LError(u"no handler for: " + obj.repr()))
Exemple #4
0
def quick_stringify(ub, obj):
    if isinstance(obj, space.Dict):
        ub.append(u"{")
        more = False
        for key, value in obj.data.iteritems():
            if not isinstance(key, String):
                raise unwind(LError(
                    u"json supports only strings as keys: "
                    + key.repr()))
            if more:
                ub.append(u",")
            ub.append(escape_string(key.string))
            ub.append(u':')
            quick_stringify(ub, value)
            more = True
        ub.append(u"}")
    elif isinstance(obj, space.List):
        ub.append(u"[")
        more = False
        for item in obj.contents:
            if more:
                ub.append(u",")
            quick_stringify(ub, item)
            more = True
        ub.append(u"]")
    elif isinstance(obj, space.String):
        ub.append(escape_string(obj.string))
    elif isinstance(obj, space.Integer):
        ub.append(numbers.integer_to_string(obj.value, 10))
    elif isinstance(obj, space.Float):
        ub.append(numbers.float_to_string(obj.number))
    elif obj is space.null:
        ub.append(u"null")
    elif obj is space.true:
        ub.append(u"true")
    elif obj is space.false:
        ub.append(u"false")
    else:
        raise unwind(LError(u"no handler for: " + obj.repr()))