Demande d'aide avec la lecture de fichier JSON
Publié : lun. 21/août/2023 22:55
Bonsoir a tous,
Votre aide serait la bienvenue car je tourne en rond pour lire un fichier json avec le format suivant:Ce fichier comporte un grand nombre d'enregistrements qui correspondent a toutes les chaines diffusées sur les Freebox
Je voudrais pouvoir lire tous les objets tels que "dvb-Canal 31" et "uuid-webtv-290" ainsi que toutes les valeurs qui leurs sont attachées.
J'ai commencé a écrire un bout de code pour capitaliser ce que j'ai compris, notamment le fait que le contenu d'un fichier json est soit array, soit objet (pour simplifier).
Voici le code :Pour le moment, ce code me permet d'otenir le résultat suivant:Je n'arrive qu'a obtenir les 2 premiers objets, a savoir "success": true et "result"
Toute aide que vous pourriez m'apporter pour me mettre sur la bonne voie serait la bienvenue.
Merci a vous,
cage
Votre aide serait la bienvenue car je tourne en rond pour lire un fichier json avec le format suivant:
Code : Tout sélectionner
{
"success": true,
"result" : {
"dvb-Canal 31" : {
"has_abo" : false,
"available" : true,
"short_name" : "Canal 31",
"has_service": true,
"logo_url" : "/api/latest/tv/img/channels/logos68x60/dvb-Canal 31.png",
"name" : "Canal 31",
"uuid" : "dvb-Canal 31"
},
"uuid-webtv-290" : {
"has_abo" : false,
"available" : true,
"short_name" : "France 3 Cote-d'Azur",
"has_service": true,
"logo_url" : "/api/latest/tv/img/channels/logos68x60/uuid-webtv-290.png",
"name" : "France 3 Côte-d'Azur",
"uuid" : "uuid-webtv-290"
}
}
}
Je voudrais pouvoir lire tous les objets tels que "dvb-Canal 31" et "uuid-webtv-290" ainsi que toutes les valeurs qui leurs sont attachées.
J'ai commencé a écrire un bout de code pour capitaliser ce que j'ai compris, notamment le fait que le contenu d'un fichier json est soit array, soit objet (pour simplifier).
Voici le code :
Code : Tout sélectionner
EnableExplicit
Define PLAYLIST$=".\m3u\Freebox\playlist.m3u"
Define JSONFILE$=".\m3u\Freebox\playlist.json"
Define JSONTEXT$=".\m3u\Freebox\playlist.json.txt"
Define PLAYURL$ = "http://mafreebox.freebox.fr/freeboxtv/playlist.m3u"
Define JSONURL$ = "http://mafreebox.freebox.fr/api/v3/tv/channels/"
Define JSON, OUT, texte$
; si le fichier playlist.json n'existe pas, on le télécharge.
If FileSize(JSONFILE$) = -1
Debug "Le fichier json n'existe pas."
If ReceiveHTTPFile(JSONURL$, JSONFILE$)
Debug "Téléchargement json réussi."
Else
Debug "Téléchargement json non réussi."
EndIf
Else
Debug "Le fichier json existe."
EndIf
; si le fichier playlist.json.txt n'existe pas, on le crée.
If FileSize(JSONTEXT$) = -1
Debug "Le fichier json.txt n'existe pas."
OUT = CreateFile(#PB_Any, JSONTEXT$, #PB_UTF8)
If OUT
JSON = LoadJSON(#PB_Any, JSONFILE$, #PB_JSON_NoCase)
If JSON
Debug "Lecture du fichier json réussie."
texte$ = ComposeJSON(JSON, #PB_JSON_PrettyPrint)
WriteString(OUT, texte$, #PB_UTF8)
FreeJSON(JSON)
Else
Debug "Erreur lecture du fichier json : " + JSONErrorMessage()
EndIf
CloseFile(OUT)
EndIf
Else
Debug "Le fichier json.txt existe."
EndIf
Debug JSONFILE$+" = "+Str(Round(FileSize(JSONFILE$)/1024,#PB_Round_Up)) + " Ko"
Debug JSONTEXT$+" = "+Str(Round(FileSize(JSONTEXT$)/1024,#PB_Round_Up)) + " Ko"
Structure chaine
uuid.s
name.s
avalaible.a
logo_url.s
has_service.a
short_name.s
has_abo.a
EndStructure
Global NewList chaines.chaine()
;Global NewMap chaines.chaine()
Define jsonObjectValue, object$, value
JSON = LoadJSON(#PB_Any, JSONTEXT$, #PB_JSON_NoCase)
If JSON
; get the json object value
jsonObjectValue = JSONValue(JSON)
; retrieve the members of the json object
If ExamineJSONMembers(jsonObjectValue)
; iterate through the members of the json object
While NextJSONMember(jsonObjectValue)
object$ = JSONMemberKey(jsonObjectValue)
If JSONType(JSONMemberValue(jsonObjectValue)) = #PB_JSON_Boolean
value = GetJSONBoolean(JSONMemberValue(jsonObjectValue))
Debug "> " + object$ + " = " + value
Else
Debug "> " + object$
EndIf
Wend
EndIf
; clear & release the json object
FreeJSON(JSON)
EndIf
; https://www.purebasic.fr/english/viewtopic.php?t=72004
; https://www.purebasic.fr/english/viewtopic.php?t=74732
Code : Tout sélectionner
Le fichier json existe.
Le fichier json.txt existe.
.\m3u\Freebox\playlist.json = 237 Ko
.\m3u\Freebox\playlist.json.txt = 374 Ko
> success = 1
> result
Toute aide que vous pourriez m'apporter pour me mettre sur la bonne voie serait la bienvenue.
Merci a vous,
cage