Re-bonjour à tous,
Pour compléter le résultat de la recherche, il me semble intéressant aussi de retourner le type de donnée pour chaque clé. Car la "valeur" contenue par une clé peut être du texte, une valeur numérique, un tableau, ou un "parent" (ou ?). Et le traitement ultérieur sera donc différent selon ce type de donnée.
Le code suivant retourne donc un tableau avec la clé, son niveau hiérarchique et le type de données.
(et avec un visuel hiérarchisé à droite de la liste à partir de la colonne E, pour-faire-comme-Steelson

)
Toujours avec l'adresse en A1
Option Explicit
' ***********************************************************************
' ***** *****
' ***** CODE PierreP56 : http://tatiak.canalblog.com/ *****
' ***** *****
' ***********************************************************************
Sub Recup_Cles_json()
Dim Ndf As String, S As String, T As Variant
With ActiveSheet
If Not .Range("A1").Value = "" Then
S = Json_txt(.Range("A1").Value)
T = GetKeys_Niveaux(S)
.Range("A2:T2000").ClearContents
.Range("A2").Resize(UBound(T, 2), UBound(T, 1)) = Application.Transpose(T)
End If
End With
End Sub
Function Json_txt(Site As String) As String
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", Site, False
.send
Json_txt = .responsetext
End With
End Function
Function GetKeys_Niveaux(Sttk As String) As Variant
Dim T1() As String, T2() As String, T3() As String
Dim i As Long, j As Long, k As Long, m As Long, idx As Long
Dim clefs As Variant, S As String, Ty As String
Dim Present As Boolean, Niv As Byte
Niv = 0
idx = 1
ReDim clefs(1 To 20, 1 To idx)
T1 = Split(Sttk, "{")
For i = 0 To UBound(T1)
T2 = Split(T1(i), "}")
If i > 0 Then Niv = Niv + 1
For j = 0 To UBound(T2)
If j > 0 Then Niv = Niv - 1
T3 = Split(T2(j), """:")
For k = 0 To UBound(T3)
If InStr(StrReverse(T3(k)), """") > 1 Then
S = Right(T3(k), InStr(StrReverse(T3(k)), """") - 1)
If Not Right(S, 1) = " " Then
Present = False
For m = 1 To UBound(clefs, 2)
If S = clefs(1, m) And Niv = clefs(2, m) Then
Present = True
Exit For
End If
Next m
If Not Present And Not S = "" Then
clefs(1, idx) = S
clefs(2, idx) = Niv
Ty = Mid(T2(j), InStr(T2(j), S) + Len(S) + 3, 1)
Select Case Ty
Case "": clefs(3, idx) = "Parent"
Case "[": clefs(3, idx) = "Array"
Case """": clefs(3, idx) = "Text"
Case Else: clefs(3, idx) = "Numeric"
End Select
clefs(4 + Niv, idx) = S
idx = idx + 1
ReDim Preserve clefs(1 To 20, 1 To idx)
End If
End If
End If
Next k
Next j
Next i
GetKeys_Niveaux = clefs
End Function