2017-09-13 3 views
1

Je lis les données d'entrée du fichier json. Ma structure de fichier JSON estComment saisir des données à partir d'un fichier tableau json lorsque plusieurs tableaux sont présents dans le fichier json en utilisant java

`{ "testloginpage":[ 
        { 
        "username":"hellotest", 
        "password":"password1234", 
        },   
       ], "emailtest":[ 
         { 
         "fromemailaddress":"[email protected]", 
         "testemailserver":"111.11.11.1", 
         "testusername":"test", 
         "testpassword":"test", 
         }, 
         { 
         "fromemailaddress":"[email protected]", 
         "testemailserver":"22.22.22.2", 
         "testusername":"aaaa", 
         "testpassword":"aaaa", 
         },  ], 

}` 

Je suis en mesure de boucle à travers et capable de lire toutes les données en utilisant le code suivant:

public static void readFromJson() { 

     JSONParser parser = new JSONParser(); 
     try{ 
      FileReader reader = new FileReader ("<--FilePath--><filenale>.json.txt"); 
      JSONParser jsonParser = new JSONParser(); 
      JSONObject jsonObject = (JSONObject) jsonParser.parse(reader); 
      JSONArray login = (JSONArray) jsonObject.get("testloginpage"); 
      for (int i = 0; i<login.size();i++){ 
       JSONObject jsonObjectRow = (JSONObject) login.get(i); 
       UserName = (String) jsonObjectRow.get("username"); 
       Password = (String) jsonObjectRow.get("password"); 
       } 
      JSONArray emailtestfields = (JSONArray) jsonObject.get("emailtest"); 
        for (i = 0; i<emailtestfields.size();i++) 
        { 
         System.out.println("The "+i+" elements in email test are" +emailtestfields.get(i)); 
        } 
        Iterator i = emailtestfields.iterator(); 
        while (i.hasNext()){ 
         JSONObject innerObj = (JSONObject) i.next(); 
         System.out.println("From email address is "+innerObj.get("fromemailaddress")); 
         fromEmailAddressEmailSettings = (String) innerObj.get("fromemailaddress"); 
         System.out.println("test Email Server is "+innerObj.get("testemailserver")); 
         emailServerEmailSettings = (String) innerObj.get("testemailserver"); 
         System.out.println("User name is "+innerObj.get("testusername")); 
         testUserNameEmailSettings = (String) innerObj.get("testusername"); 
         System.out.println("test User password is "+innerObj.get("testuserpassword")); 
         testPasswordEmailSettings = (String) innerObj.get("testpassword"); 
        } 
     }catch (Exception e) { 
      System.out.println("Error: "+e); 
     } 
} 

J'ai une classe testng où je suis la création d'un script de test. Actuellement, le script n'enregistre que le deuxième ensemble de données dans le formulaire et l'enregistre. Le scénario que j'essaye de réaliser est que je dois lire de json combien d'enregistrements d'emailtest sont disponibles (dans par exemple son 2) et que dans ma classe de test je dois d'abord prendre le premier ensemble de données emailtest et entrer et enregistrer et prendre le deuxième ensemble et entrer dans l'application Web et enregistrer. J'ai créé une fonction générique pour entrer des données dans la zone de texte qui fonctionnent bien. Je ne sais pas comment puis-je porter le compte de la boucle dans mon script de test de test et d'abord entrer dans le premier ensemble de données et enregistrer et que prendre le deuxième ensemble, entrer et enregistrer.

Répondre

0

J'ai changé le format JSON { "appLogin": { "userName": "test" , "mot de passe": "test", },

 "createNewUser":{ 
     "UserName":["test1", "test2"], 
     "UserPassword":["solution1","solution2"], 
     "UserConfirmPassword":["solution1","solution2"], 
     "UserFirstName":["testuser1","testuser2"], 
     "UserLastName":["test1","Hello2"], 
     "UserGroup":"localuser", 
     }, 
} 

Et voici le code java J'utilise

static String userName; 
static String password; 
static String newUserNames[]; 
static String newUserPasswords[]; 
static String newUserConfirmPasswords[]; 
static String newUserFirstNames[]; 
static String newUserLastNames[]; 
static String userGroup[]; 
Public static void readFile() { 
JSONParser parser = new JSONParser(); 
try { 
Object obj = parser.parse(new FileReader("<<Location of ur input json data file>>")); 
jsonObject = (JSONObject) obj; 
/** 
* This section is to read login data from input json file. 
*/ 
JSONObject gveLogin = (JSONObject) jsonObject.get("appLogin"); 
userName = (String) gveLogin.get("userName"); 
password = (String) gveLogin.get("password"); 
/** 
* This section is to read create new user from input json file. 
*/ 
JSONObject createNewUser = (JSONObject) jsonObject.get("createNewUser"); 
JSONArray newUserName = null; 
Object newUserNameObj = (createNewUser != null &&  
createNewUser.containsKey("UserName")) ? createNewUser.get("UserName") : null; 
if (newUserNameObj !=null && newUserNameObj instanceof JSONArray){ 
newUserName = (JSONArray) newUserNameObj; 
} 
int newUserNameSize = newUserName.size(); 
newUserNames = new String[newUserNameSize]; 
int newUserNameCount; 
for (newUserNameCount = 0;newUserNameCount<newUserNameSize; newUserNameCount++){ 
newUserNames [newUserNameCount] = (String) newUserName.get(newUserNameCount); 
System.out.println(newUserNames[newUserNameCount]); 
} 
.... Same for password, confirm password, first name , last name and for userGroup I have used jsonObject as follows: 
newUserGroup = (String) createNewUser.get("userGroup"); 
0

Il suffit d'enregistrer à la fois la JSONObject dans une liste et de transmettre cela à vos données méthode entrant par exemple

List<JSONObject> lst = new ArrayList.. 
while (i.hasNext()){ 
JSONObject innerObj = (JSONObject) i.next(); 
lst.add(innerObj); 
} 

for (Jsonobject a : lst) { 
    putindata(a); 
} 

public void putindata(JsonObject a) { 
    //sendKeys(a.getString("fromemailaddress"); 
    //... 
}