I m tratando de convertir a los siguientes dict into JSON using json.dumps:

 {
     'post_engaged': 36,
     'post_impressions': 491,
     'post_story': 23,
     'comment_count': 6,
     'created_time': '03:02 AM, Sep 30, 2012',
     'message': 'Specialities of Shaktis and Pandavas. \n While having power, why there isn\u2019t',
     < built - in function id > : '471662059541196',
     'status_type': 'status',
     'likes_count': 22
 } {
     'post_engaged': 24,
     'text': '30 Sept 2012 Avyakt Murlli ( Dual Voice )',
     'post_story': 8,
     'comment_count': 3,
     'link': 'http:\/\/www.youtube.com\/watch?v=VGmFj8g7JFA&feature=youtube_gdata_player',
     'post_impressions': 307,
     'created_time': '03:04 AM, Sep 30, 2012',
     'message': 'Not available',
     < built - in function id > : '529439300404155',
     'status_type': 'video',
     'likes_count': 7
 } {
     'post_engaged': 37,
     'post_impressions': 447,
     'post_story': 22,
     'comment_count': 4,
     'created_time': '03:11 AM, Sep 30, 2012',
     'message': '30-09-12 \u092a\u094d\u0930\u093e\u0924:\u092e\u0941\u0930\u0932\u0940 \u0913\u0',
     < built - in function id > : '471643246209744',
     'status_type': 'status',
     'likes_count': 20
 } {
     'post_engaged': 36,
     'post_impressions': 423,
     'post_story': 22,
     'comment_count': 0,
     'created_time': '03:04 AM, Sep 29, 2012',
     'message': 'Essence: Sweet children, whenever you have time, earn the true income. Staying i',
     < built - in function id > : '471274672913268',
     'status_type': 'status',
     'likes_count': 20
 } {
     'post_engaged': 16,
     'text': 'Essence Of Murli 29-09-2012',
     'post_story': 5,
     'comment_count': 2,
     'link': 'http:\/\/www.youtube.com\/watch?v=i6OgmbRsJpg&feature=youtube_gdata_player',
     'post_impressions': 291,
     'created_time': '03:04 AM, Sep 29, 2012',
     'message': 'Not available',
     < built - in function id > : '213046588825668',
     'status_type': 'video',
     'likes_count': 5
 }

Pero esto me lleva a

TypeError : keys must be a string

Supongo que el error puede aparecer debido a que el diccionario contiene, algunos elementos como:

 <built-in function id>: '213046588825668'

Puede alguien por favor me guía, ¿cómo debo eliminar estos elementos de la dict?

Revisión de los datos .

OriginalEl autor Viren Rajput | 2012-10-04

3 Comentarios

  1. 15

    Usted podría tratar de limpiar como este:

    for key in mydict.keys():
      if type(key) is not str:
        try:
          mydict[str(key)] = mydict[key]
        except:
          try:
            mydict[repr(key)] = mydict[key]
          except:
            pass
        del mydict[key]

    Este intentará convertir cualquier tecla que no es una cadena de caracteres en una cadena. Cualquier tecla que no se podrían convertir en una cadena o representado como una cadena serán eliminados.

    No es totalmente su culpa, pero esto no va a hacer lo que el autor de la pregunta realmente quiere.
    Hizo un poco de modificaciones, pero ¡y funcionó!! Gracias mucho
    La única manera de conseguir que la función de objeto como una clave en su diccionario es si escribió id (que es una función integrada) en lugar de "id" (que es una cadena literal) en algún lugar. En lugar de tratar de trabajar alrededor de su error existente con más de código, tal vez usted debería tratar de averiguar dónde está el código de la construcción del diccionario se mete?

    OriginalEl autor bigblind

  2. 6

    Aceptado la modificación de la respuesta anterior, escribí una función para manejar los diccionarios de profundidad arbitraria:

    def stringify_keys(d):
        """Convert a dict's keys to strings if they are not."""
        for key in d.keys():
    
            # check inner dict
            if isinstance(d[key], dict):
                value = stringify_keys(d[key])
            else:
                value = d[key]
    
            # convert nonstring to string if needed
            if not isinstance(key, str):
                try:
                    d[str(key)] = value
                except Exception:
                    try:
                        d[repr(key)] = value
                    except Exception:
                        raise
    
                # delete old key
                del d[key]
        return d

    OriginalEl autor Nolan Conaway

  3. -8

    Tal vez esto ayudará a que el tipo de al lado:

    strjson = json.dumps(str(dic).replace("'",'"'))
    esto es bastante feo y también vuelca un json-codificación de las json-ish datos codificados, por lo tanto json-codificación se ejecuta una vez para muchos.

    OriginalEl autor Donnie

Dejar respuesta

Please enter your comment!
Please enter your name here