#java #arrays #json
#java #массивы #json
Вопрос:
У меня есть файл JSON, подобный этому —
{
"users": [
{
"displayName": "Amanda Polly",
"givenName": "Amanda",
"surname": "Polly",
"extension_user_type": "user",
"identities": [
{
"signInType": "emailAddress",
"issuerAssignedId": "amandapolly@gmail.com"
}
],
"extension_timezone": "PST",
"extension_locale": "en-US",
"extension_tenant": "EG1234"
},
{
"displayName": "Lowa Doe",
"givenName": "Lowa",
"surname": "Doe",
"extension_user_type": "user",
"identities": [
{
"signInType": "userName",
"issuerAssignedId": "lowadow123"
}
],
"extension_timezone": "PST",
"extension_locale": "en-US",
"extension_tenant": "EG1234"
}
]
}
Если вы видите, что внутри массива «пользователи» заключены 2 пользователя (Аманда и Лоуа).
Я проанализировал файл и преобразовал все это в одну строку.
Теперь я пытаюсь выполнить итерацию по всем полям, таким как DisplayName, GivenName, фамилия и так далее! но если вы видите, что идентификаторы снова являются оболочкой для «signInType» и «issuerAssignedId».
Я написал код, который выполняет итерации по всем пользователям, но я не могу получить поле «идентификаторы». Ниже приведен мой код:
Здесь параметром для JSONObject является jsonAsString (это моя строка с указанным выше JSON), теперь я создал JSONArray и передаю оболочку «users».
приведенный ниже код работает нормально, но может кто-нибудь, пожалуйста, помочь в повторении поля «идентификаторы» для каждого пользователя.
JSONObject jsonObject = new JSONObject(jsonAsString);
org.json.JSONArray jsonArray = jsonObject.getJSONArray("users");
System.out.println(jsonArray.length());
for(int i = 0; i< jsonArray.length();i )
{
displayName = jsonArray.getJSONObject(i).getString("displayName");
givenName = jsonArray.getJSONObject(i).getString("givenName");
surname = jsonArray.getJSONObject(i).getString("surname");
extension_user_type = jsonArray.getJSONObject(i).getString("extension_user_type");
try
{
extension_timezone = jsonArray.getJSONObject(i).getString("extension_timezone");
extension_locale = jsonArray.getJSONObject(i).getString("extension_locale");
extension_tenant = jsonArray.getJSONObject(i).getString("extension_tenant");
}
catch(JSONException e)
{
System.out.println("nSome attribute was not found!");
}
System.out.println("ndisplayName : " displayName);
System.out.println("ngivenName : " givenName);
System.out.println("nsurname : " surname);
System.out.println("nextension_user_type : " extension_user_type);
System.out.println("nextension_timezone : " extension_timezone);
System.out.println("nextension_locale : " extension_locale);
System.out.println("nextension_tenant : " extension_tenant);
Комментарии:
1. Поместите свой JSON на этот сайт , чтобы преобразовать его в соответствующие классы данных C #, а затем просто используйте
Root deserialized = JsonConvert.DeserializeObject(myJson);
для десериализации всего этого2. Можете ли вы предложить другой способ?
3. похоже на мое?
4. Я мог бы. Но предложенный мной способ намного проще.
5. На самом деле я хотел сделать это аналогичным образом, но из-за ограничений я не могу. Однако в следующий раз я обязательно буду использовать этот способ, поскольку это лучший подход
Ответ №1:
Используйте приведенный ниже код :
JSONObject JSONObject = новый JSONObject(jsonAsString); org.json.JSONArray JSONArray = JSONObject.getJSONArray («пользователи»);
System.out.println(jsonArray.length());
for(int i = 0; i< jsonArray.length();i )
{
displayName = jsonArray.getJSONObject(i).getString("displayName");
givenName = jsonArray.getJSONObject(i).getString("givenName");
surname = jsonArray.getJSONObject(i).getString("surname");
extension_user_type = jsonArray.getJSONObject(i).getString("extension_user_type");
org.json.JSONArray jsonIdentitiesArray = jsonArray.getJSONObject(i).getJSONArray("identities");
for(int j = 0; j< jsonIdentitiesArray.length();j )
{
String signInType=jsonIdentitiesArray.getJSONObject(j).getString("signInType");
System.out.println("signInType : " signInType);
String issuerAssignedId=jsonIdentitiesArray.getJSONObject(j).getString("issuerAssignedId");
System.out.println("issuerAssignedId : " issuerAssignedId);
}
try
{
extension_timezone = jsonArray.getJSONObject(i).getString("extension_timezone");
extension_locale = jsonArray.getJSONObject(i).getString("extension_locale");
extension_tenant = jsonArray.getJSONObject(i).getString("extension_tenant");
}
catch(JSONException e)
{
System.out.println("nSome attribute was not found!");
}
System.out.println("ndisplayName : " displayName);
System.out.println("ngivenName : " givenName);
System.out.println("nsurname : " surname);
System.out.println("nextension_user_type : " extension_user_type);
System.out.println("nextension_timezone : " extension_timezone);
System.out.println("nextension_locale : " extension_locale);
System.out.println("nextension_tenant : " extension_tenant);
Ответ №2:
я думаю, вы можете добиться этого, выполнив тот же процесс, что и с пользовательским json arr, для каждого пользователя используйте функцию get, чтобы получить массив identities json и повторить его для каждого пользователя.
JSONObject currentUserJsonObj = (JSONObject)JSONArray.getJSONObject(i);
JSONArray idnts=(JSONArray)(currentUserJsonObj.get(«идентификаторы»));