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()))
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()))
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()))
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()))