Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  5 6218
Hei.
Håper det er greit at jeg oppretter en ny tråd for dette istedenfor å fortsette på den gamle tråden, tenkte det ville være mer oversiktlig å gjøre det sånn.

Jeg har en variabel som inneholder en json-dump.

Kode

def savegroupposts():
 json_data = checkgroupposts()
 decoded_data = json.dumps(json_data)

 datas=json_data["data"][0]
 time=datas["created_time"]
 message=datas["message"]
 id=datas["id"]

 query = "INSERT IGNORE INTO `posts` (`id`, `created_time`, `message`) VALUES ('%s', '%s', '%s')"; % (id,time,message)
 cur.execute(query)
 
 testvar=time + message
 print(testvar)
Nå får jeg kun første linje som output, og kun første linje blir lagret i MySQL-tabellen.

Jeg er sikker på at det fins en for / while loop som kan brukes til å gå gjennom hele JSON-dumpen og lagre alle verdiene i MySQL-tabellen.

Men hvordan?

JSON-dumpen er fra Facebook og ser ca. sånn ut:

Kode

{'data': [
{'created_time': '2021-01-03T11:24:40+0000', 'message': 'Hei', 'id': '99999999999999999999999999999'}, 
{'created_time': '2021-01-03T11:00:00+0000', 'message': 'hadet bra!', 'id': '88888888888888888888888888888'}, 
{'created_time': '2021-01-03T10:10:00+0000', 'message': 'Vi snakkes.', 'id': '77777777777777777777777777777'},
Sist endret av RogerThat; 3. januar 2021 kl. 16:39.
Du får berre første linje fordi du berre henter ut index 0 (json_data("data")[0])

Her må du loope gjennom på egna måte for å få kvar line...
Har du noen konkrete forslag til hvordan det kan gjøres?

Kode

def savegroupposts():
 jsona=json.loads(json.dumps(checkgroupposts()))
 print(jsona)
 if jsona['data'] == []:
  print("No")
 else:
  for rows in jsona['data']:
   print("Test:" + rows['message'])
Dæææær jaaaa!
Kjæmpegreier!!!!
Sist endret av RogerThat; 3. januar 2021 kl. 18:26. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
Trigonoceps occipita
vidarlo's Avatar
Donor

Kode

 json_data = checkgroupposts()
 decoded_data = json.dumps(json_data)
 
 datas=json_data["data"][0]
 time=datas["created_time"]
 message=datas["message"]
 id=datas["id"]
Her henter du først json til json_data, så kjører du den igjennom json.dumps() - for å så bruke json_data rått igjen på linja under. Det fornuftige å gjere med json er å parse det, og deretter bruke det du har parsa. Det ser det ikkje som du gjer her.

Heilt ærleg er det fornuftige rådet å ta eit steg bakover, og bruke meir tid på å løyse trivielle problemstillinger og forstå korleis programmering fungerer, framfor å hoppe på å gjere avanserte ting med ein gong.
Noko slik?

Kode

def savegroupposts():
    json_data = checkgroupposts()
    #decoded_data = json.dumps(json_data)
 
    datas = json_data["data"]

    
    
    for x in datas:
        time = x["created_time"]
        message = x["message"]
        id = x["id"]

        query = "INSERT IGNORE INTO `posts` (`id`, `created_time`, `message`) VALUES ('%s', '%s', '%s')", (id,time,message)
        cur.execute(query)
 
savegroupposts()
Sitat av vidarlo Vis innlegg

Kode

 json_data = checkgroupposts()
 decoded_data = json.dumps(json_data)
 
 datas=json_data["data"][0]
 time=datas["created_time"]
 message=datas["message"]
 id=datas["id"]
Her henter du først json til json_data, så kjører du den igjennom json.dumps() - for å så bruke json_data rått igjen på linja under. Det fornuftige å gjere med json er å parse det, og deretter bruke det du har parsa. Det ser det ikkje som du gjer her.

Heilt ærleg er det fornuftige rådet å ta eit steg bakover, og bruke meir tid på å løyse trivielle problemstillinger og forstå korleis programmering fungerer, framfor å hoppe på å gjere avanserte ting med ein gong.
Vis hele sitatet...
Løste problemet rett før du postet dette innlegget, men tusen takk likevel

Jeg har egentlig kommet meg et stykke i forbindelse med programmering og slike ting, men har et problem med en sykdom som gjør at jeg sliter veldig med hukommelsen og kognitive evner, derfor må jeg på en måte ofte lære programmering på nytt hver gang jeg setter meg foran PC-en. Heldigvis har vi freakforum og deg, slik at jeg kommer meg videre

Tusen takk for rådet likevel.

Sitat av snegler Vis innlegg
Noko slik?

Kode

def savegroupposts():
    json_data = checkgroupposts()
    #decoded_data = json.dumps(json_data)
 
    datas = json_data["data"]

    
    
    for x in datas:
        time = x["created_time"]
        message = x["message"]
        id = x["id"]

        query = "INSERT IGNORE INTO `posts` (`id`, `created_time`, `message`) VALUES ('%s', '%s', '%s')", (id,time,message)
        cur.execute(query)
 
savegroupposts()
Vis hele sitatet...
Tusen takk!

Det er ikke alltid key-en "message" er tilstede, ettersom det isåfall er "attachment", da noen folk legger ut et innlegg som et bilde istedenfor tekst. Da får jeg KeyError: 'message'.

Hva kan jeg gjøre for å få den til å hoppe over objektet som mangler message?

EDIT: Løste det ved å bruke try.
Sist endret av RogerThat; 3. januar 2021 kl. 21:12. Grunn: Automatisk sammenslåing med etterfølgende innlegg.