2016-03-28 11 views
0

HTTP yanıtından JSON verilerini okuyorum ve JSONPath tarafından çıkarılan bazı verileri vermem gerekiyor. İstediğim veriler tamam, hata ayıklama sırasında gösteriliyor, ancak değiştirmem gereken diğer JSON nesnesine ekleyemiyorum.JMeter'da JSON yanıtı işleniyor

Sorun, JSON dizisine yeni öğeler eklemeyi bilmiyorum ve ne çalıştığım önemli değil, "XXX alanına erişilemiyor" hatası alıyorum. JSON için yeniyim ve bazı önerileri takdir ediyorum. fileinfos diziyi mevcut içine yerleştirilmelidir

{ 
    "background": null, 
    "childInfos": [ 

    ], 
    "claimScope": 2, 
    "customAttributeInfos": [ 

    ], 
    "dueDate": 1459461540000, 
    "instructions": null, 
    "name": "Client_1-23456", 
    "owners": [ 
    "4YESyxwCtA2YBncmM+tnEU5Ze6Fev8K3" 
    ], 
    "priority": 1, 
    "referenceFilesInfos": [  

    ] 

    ... 

    "batchInfos": [ 
    { 
     "name": "Batch1", 
     "targetFormat": "TXML", 
     "workflowTicket": "4YESyxwCtA3PqFg+3vJ6nE5Ze6Fev8K3", 
     "targetLanguageInfos": [ 
     { 
      "targetLanguageLocale": "de-DE", 
      "dueDate": 1459461540000, 
      "dueDateInfos": [ 
      { 
       "phaseName": "AAAAAAAA", 
       "dueDate": 1458645663900 
      }, 
      { 
       "phaseName": "BBBBBBB", 
       "dueDate": 1459098928400 
      }, 
      { 
       "phaseName": "CCCCCC", 
       "dueDate": 1459461540000 
      } 
      ], 
      "organizationTmTicket": null 
     } 
     ], 
     "fileInfos": [ 

     ] 

Şimdi, dinamik alıyorum nesneler:

JSON gibi bir şeydir.

Ben BeanShell aracılığıyla gibi şeyler denedim:

JSONObject fajl = new JSONObject();  

fajl.put("repositoryTicket",vars.get("repTicket")); 
fajl.put("name",vars.get("fileName")); 
fajl.put("fileTargetFormat","TXML"); 
fajl.put("fileFormatTicket","4YESyxwCtA2glxeFIbqVOwNwQhim05Uq"); 
fajl.put("fileFormatName","Word"); 

String CEO = vars.get("CEO"); 
JSONObject pom = new JSONObject(CEO); - note1 
pom.batchInfos[0].fileInfos[i-1].push(fajl); - note2 

Note1 - CEO gelecek istek için ihtiyaç JSON ayrıştırılır.

note2 - İşlenen öğelerin sayısını izleyen sayaca sahibim. Bunu tezgahsız da denedim.

Nesne fajl iyi, biliyorum, ama bu diziye nasıl ekleyebilirim?

cevap

0

Aşağıdaki kodu deneyin. nesneyi

String jsonDataString = "{\"background\":null,\"childInfos\":[],\"claimScope\":2,\"customAttributeInfos\":[],\"dueDate\":1459461540000,\"instructions\":null,\"name\":\"Client_1-23456\",\"owners\":[\"4YESyxwCtA2YBncmM+tnEU5Ze6Fev8K3\"],\"priority\":1,\"referenceFilesInfos\":[],\"batchInfos\":[{\"name\":\"Batch1\",\"targetFormat\":\"TXML\",\"workflowTicket\":\"4YESyxwCtA3PqFg+3vJ6nE5Ze6Fev8K3\",\"targetLanguageInfos\":[{\"targetLanguageLocale\":\"de-DE\",\"dueDate\":1459461540000,\"dueDateInfos\":[{\"phaseName\":\"AAAAAAAA\",\"dueDate\":1458645663900},{\"phaseName\":\"BBBBBBB\",\"dueDate\":1459098928400},{\"phaseName\":\"CCCCCC\",\"dueDate\":1459461540000}],\"organizationTmTicket\":null}],\"fileInfos\":[]}]}"; 
      JSONObject mainObject = new JSONObject(jsonDataString); 
      JSONObject fajl = new JSONObject(); 
      JSONArray list = new JSONArray(); 
      JSONArray batchInfos = mainObject.getJSONArray("batchInfos"); 
      JSONObject obj = batchInfos.getJSONObject(0); 
      JSONArray fileInfos = obj.getJSONArray("fileInfos"); 
      for(int i=0;i<3;i++){ 
       fajl.put("repositoryTicket", i); 
       fajl.put("name", i); 
       fajl.put("fileTargetFormat", "TXML"); 
       fajl.put("fileFormatTicket", "4YESyxwCtA2glxeFIbqVOwNwQhim05Uq"); 
       fajl.put("fileFormatName", "Word"); 
       fileInfos.put(fajl); 
      } 
      System.out.println(mainObject); 
dizisine ekleyebileceksiniz