2017-03-14 6 views
3

JIRAプロジェクトから問題を抽出し、各問題をループしてExcel内に既に存在するかどうかを確認するコードを作成中ですシート。いずれの結果についても、問題が存在するかどうかを本質的にタグ付けする新しいKey-Valueの組み合わせを追加したいと思います。 "存在": "真"。VBA/JIRA/JSON:JSONから解析された辞書に新しいキー/値を追加

Tim HallのJSONConverter(VBA-JSON)コードを使用して、JSON応答をExcel辞書に解析しています。今、新しいキー値を辞書に追加するために正しい構文を理解するのに苦労しています。

例JSONは:

"issues": [{ 
     "expand": "operations,editmeta,changelog,transitions,renderedFields", 
     "id": "123456789", 
     "self": "url", 
     "key": "XY-12345", 
     "fields": { 
      "issuetype": { 
         "self": "url", 
         "id": "1", 
         "description": descrip.", 
         "iconUrl": "url", 
         "name": "Story", 
         "subtask": false 
         }, 
       }, 
      }, 

これは私が作るしようとしているものです(辞書はJSONに戻って解析された場合は、 '存在する' を参照):コードの面では

"issues": [{ 
     "expand": "operations,editmeta,changelog,transitions,renderedFields", 
     "id": "123456789", 
     "self": "url", 
     "key": "XY-12345", 
     "exists": "true", 
     "fields": { 
      "issuetype": { 
         "self": "url", 
         "id": "1", 
         "description": descrip.", 
         "iconUrl": "url", 
         "name": "Story", 
         "subtask": false 
         }, 
       }, 
      }, 

、 JIRAからJSONを取得したら、私は次のように変換します:

次に、新しい項目をdicに追加しようとしますすべての問題をループによってtionary:最後に

for n=1 to oDict("issues").count 
    If dotfind(oDict("issues")(n)("key"),"r",sht) = 0 Then '//function to search if key exists 
     oDict.Add ("issues")(n)("exists"), "false" 
    Else 
     oDict.Add ("issues")(n)("exists"), "true" 
    End if 
next n 

は、私は次のようにコードを変更する

Cells(r,c) = oDict("issues")(n)("exists") 
+0

これを試すとどうなりますか? –

+0

私はエラーが出るように私は、コードを実行することはできません「oDict.Addを...」 「コンパイルエラー: が予想される:=」 – Patrick

+0

例JSONのオープンとクローズかっこが一致していない、それがあることを修正する方が良いでしょう他人をテストすることを可能にする。 'dotfind()'を含め、コード全体を投稿してください。 – omegastripes

答えて

3

てみ存在するために値を取得するには、以下の呼び出しできるようにしたいと思います:

For n = 1 To oDict("issues").Count 
    If dotfind(oDict("issues")(n)("key"), "r", sht) = 0 Then '//function to search if key exists 
     oDict("issues")(n).Add "exists", "false" 
    Else 
     oDict("issues")(n).Add "exists", "true" 
    End If 
Next n 
+0

ありがとう、これは期待通りに機能しました! – Patrick

0

これは私のために働いた、HTH。 JSONLintで検証

Private Const sJSON As String = "{" & _ 
    """issues"": [{" & _ 
     """expand"": ""operations,editmeta,changelog,transitions,renderedFields""," & _ 
     """id"": ""123456789""," & _ 
     """self"": ""url""," & _ 
     """key"": ""XY-12345""," & _ 
     """fields"": {" & _ 
      """issuetype"": {" & _ 
       """self"": ""url""," & _ 
       """id"": ""1""," & _ 
       """description"": ""descrip.""," & _ 
       """iconUrl"": ""url""," & _ 
       """name"": ""Story""," & _ 
       """subtask"": ""false""" & _ 
      "}" & _ 
     "}" & _ 
    "}]" & _ 
"}" 

Sub test() 
    Dim sht 

    Dim oDict As Scripting.Dictionary 
    Set oDict = ParseJson(sJSON) 

    Dim issue 
    For Each issue In oDict("issues") 
     If dotfind(issue("key"), "r", sht) = 0 Then '//function to search if key exists 
      issue.Add "exists", "false" 
     Else 
      issue.Add "exists", "true" 
     End If 
    Next 

    Dim result 
    result = ConvertToJson(oDict) 

    Debug.Print result 

    Dim r, c, n 
    r = 1 
    c = 1 
    n = 1 
    Cells(r, c) = oDict("issues")(n)("exists") ' Writes false to "A1" 

End Sub 

Private Function dotfind(a, b, c) As Integer 
    dotfind = 0 
End Function 

Output

{ 
    "issues": [{ 
     "expand": "operations,editmeta,changelog,transitions,renderedFields", 
     "id": "123456789", 
     "self": "url", 
     "key": "XY-12345", 
     "fields": { 
      "issuetype": { 
       "self": "url", 
       "id": "1", 
       "description": "descrip.", 
       "iconUrl": "url", 
       "name": "Story", 
       "subtask": "false" 
      } 
     }, 
     "exists": "false" 
    }] 
} 

関連する問題