2016-11-04 4 views
1
[ 
{ 
    "name": "Test", 
    "type": "Private", 
    "item":[{"itmeNo":"PT-15003C","quantity":"3"}, 
      {"itmeNo":"PT-15003C","quantity":"3"}], 

    "successMsg":"Item(s) added to the job list." 
    } 
] 

Hallo eingeben, ich Daten Parametrisierung machte mit json.Above meine JSON-Daten ist, möchte ich diese Daten in einem Formular eingeben, wobei i itemNo und Menge zusammen eingeben müssen . Wie kann dies mithilfe der Datenparametrisierung mithilfe von json geschehen? Wenn es ein Schlüssel-ein-Wert-Paar gibt, dann funktioniert mein Code, aber kann mir in diesem Fall jemand helfen, eine Lösung zu bekommen? Ich habe folgenden Code für einen einzelnen Schlüsselpaarwert geschrieben.mehr Daten zusammen in Form unter Verwendung von JSON-Daten

public static Object[][] getData(String path) { 
    JSONParser parser = new JSONParser(); 
    JSONArray jArray = null; 
    Object[][] testData = null; 
    try { 
     jArray = (JSONArray) parser.parse(new FileReader(System.getProperty("user.dir") + path)); 
     testData = new Object[jArray.size()][1]; 
     Hashtable<String, String> table = new Hashtable<String, String>(); 
     int i = 0; 
     for (Object obj : jArray) { 
      table = new Hashtable<String, String>(); 
      JSONObject objJson = (JSONObject) obj; 
      Set<?> keys = objJson.keySet(); 
      Iterator a = keys.iterator(); 
      while (a.hasNext()) { 
       String key = (String) a.next(); 
       String value = (String) objJson.get(key); 
       // System.out.print("key : "+key); 
       // System.out.println(" value :"+value); 
       table.put(key, value); 
      } 
      testData[i][0] = table; 
      i++; 
     } 
     return testData; 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 
+0

Ihre Frage nicht klar ist, was Sie genau Sie es klar machen wollen. – Vickyexpert

+0

@Nikita: Jetzt scheint es so, als ob du im "item" -Array hängen bleibst, wo es wieder mehrere Objekte gibt. Wenn das der Fall ist, dann können Sie getJSONarray verwenden und "item" an es übergeben und das Objekt innerhalb des Arrays wiederholen, nachdem Sie die Anzahl der Array kennen. – Max

+0

Versuchen Sie einen datengetriebenen Test zu erstellen? Wenn dies der Fall ist, können Sie TestNG mit [Daten-Provider-Erweiterung] (https://github.com/cbeust/testng/wiki/3rd-party-extensions#data-provider-extension) verwenden. – user861594

Antwort

1

Es ist sehr einfach. Erstellen Sie zuerst eine Klasse, sagen wir TestObject.java und Item.java wie folgt zu Ihrem json strucuture.

TestObject.java

import java.util.List; 

public class TestObject { 
    private String name; 
    private String type; 
    private List<Item> items; 
    private String successMsg; 

    /** 
    * @return the name 
    */ 
    public String getName() { 
     return name; 
    } 
    /** 
    * @param name the name to set 
    */ 
    public void setName(String name) { 
     this.name = name; 
    } 
    /** 
    * @return the type 
    */ 
    public String getType() { 
     return type; 
    } 
    /** 
    * @param type the type to set 
    */ 
    public void setType(String type) { 
     this.type = type; 
    } 
    /** 
    * @return the items 
    */ 
    public List<Item> getItems() { 
     return items; 
    } 
    /** 
    * @param items the items to set 
    */ 
    public void setItems(List<Item> items) { 
     this.items = items; 
    } 
    /** 
    * @return the successMsg 
    */ 
    public String getSuccessMsg() { 
     return successMsg; 
    } 
    /** 
    * @param successMsg the successMsg to set 
    */ 
    public void setSuccessMsg(String successMsg) { 
     this.successMsg = successMsg; 
    } 
} 

Item.java

public class Item { 
    private String itemNo; 
    private int qty; 

    /** 
    * @return the itemNo 
    */ 
    public String getItemNo() { 
     return itemNo; 
    } 
    /** 
    * @param itemNo the itemNo to set 
    */ 
    public void setItemNo(String itemNo) { 
     this.itemNo = itemNo; 
    } 
    /** 
    * @return the qty 
    */ 
    public int getQty() { 
     return qty; 
    } 
    /** 
    * @param qty the qty to set 
    */ 
    public void setQty(int qty) { 
     this.qty = qty; 
    } 

} 

jetzt Ihre JSON-String analysieren wie folgt. Im Folgenden finden Sie das Beispielprogramm, das Ihnen die Grundlagen verstehen helfen:

Test.java

import java.util.ArrayList; 
import java.util.List; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

public class Test { 

    public static void main(String[] args) { 
     TestObject testObject = new TestObject(); 
     try { 
      JSONObject jsonObject = new JSONObject("{\"name\": \"Test\"," 
                + "\"type\": \"Private\"," 
                + "\"item\":[{\"itmeNo\":\"PT-15003C\",\"quantity\":\"3\"}," 
                + "   {\"itmeNo\":\"PT-15003C\",\"quantity\":\"3\"}]," 
                + "\"successMsg\":\"Item(s) added to the job list.\"}"); //pass json string 

      JSONArray jsonArray = jsonObject.getJSONArray("item"); //get the item jsonarray 

      testObject.setName(jsonObject.getString("name")); 
      testObject.setType(jsonObject.getString("type")); 

      List<Item> items = new ArrayList<>(); 
      Item item = null; 

      //Iterate the item array and add to the itemlist object 
      for (int i = 0; i < jsonArray.length() ; i++) { 
       JSONObject jsonItem = jsonArray.getJSONObject(i); 
       String itmeNo = jsonItem.getString("itmeNo"); 
       String quantity = jsonItem.getString("quantity"); 
       item = new Item(); 
       item.setItemNo(itmeNo); 
       item.setQty(Integer.parseInt(quantity)); 
       items.add(item); 
      } 

      testObject.setItems(items); 
      testObject.setSuccessMsg(jsonObject.getString("successMsg")); //Now you will have a testObject which have all values from json. 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 


} 
Verwandte Themen