python JSON array newlines

后端 未结 3 1397
春和景丽
春和景丽 2021-02-19 22:41

I have a large dictionary that has some large array data in it:

d = {\'something\': {\'else\': \'x\'}, \'longnumbers\': [1,2,3,4,54,6,67,7,7,8,8,8,6,4,3,3,5,6,7,         


        
3条回答
  •  孤街浪徒
    2021-02-19 23:30

    @jterrace's answer was written for Python 2, which has since deprecated for Python 3 with changes to types. So, with all due credit to his answer, I tweaked it a tad bit for my personal use & compatibility with Python 3, including support for tuples as lists:

    import numpy
    
    INDENT = 3
    SPACE = " "
    NEWLINE = "\n"
    
    # Changed basestring to str, and dict uses items() instead of iteritems().
    def to_json(o, level=0):
      ret = ""
      if isinstance(o, dict):
        ret += "{" + NEWLINE
        comma = ""
        for k, v in o.items():
          ret += comma
          comma = ",\n"
          ret += SPACE * INDENT * (level + 1)
          ret += '"' + str(k) + '":' + SPACE
          ret += to_json(v, level + 1)
    
        ret += NEWLINE + SPACE * INDENT * level + "}"
      elif isinstance(o, str):
        ret += '"' + o + '"'
      elif isinstance(o, list):
        ret += "[" + ",".join([to_json(e, level + 1) for e in o]) + "]"
      # Tuples are interpreted as lists
      elif isinstance(o, tuple):
        ret += "[" + ",".join(to_json(e, level + 1) for e in o) + "]"
      elif isinstance(o, bool):
        ret += "true" if o else "false"
      elif isinstance(o, int):
        ret += str(o)
      elif isinstance(o, float):
        ret += '%.7g' % o
      elif isinstance(o, numpy.ndarray) and numpy.issubdtype(o.dtype, numpy.integer):
        ret += "[" + ','.join(map(str, o.flatten().tolist())) + "]"
      elif isinstance(o, numpy.ndarray) and numpy.issubdtype(o.dtype, numpy.inexact):
        ret += "[" + ','.join(map(lambda x: '%.7g' % x, o.flatten().tolist())) + "]"
      elif o is None:
        ret += 'null'
      else:
        raise TypeError("Unknown type '%s' for json serialization" % str(type(o)))
      return ret
    

提交回复
热议问题