Исходя из вашего кода, я предполагаю, что вы полностью проанализировали его в Map<K, V>
.Если у вас есть, причина очень легко найти: вы добавили массив (/ список) в массив.Это означает, что ваша попытка дает вам Array<Array<String>>
или Array<List<String>>
.
Если вы снова посмотрите на свой код, вы добавите только один элемент или один массив в массив.Если вы проанализируете его обратно в JSON, он будет выглядеть следующим образом:
[
[
"0", "3.00", ...
]
]
Основываясь на примере JSON, приведем пример псевдокодирования вашего текущего кода:
[
[
"0", "3.00", ...
]
].size()
Что естественновозвращает 1: у вас есть только один элемент в родительском.
Если вы хотите, чтобы он работал точно так, как у вас сейчас, вам нужно использовать оператор распространения (*
).arrayOf
занимает vararg
, и вы должны распространить исходный массив в vararg, чтобы не пропустить массив.Это дает вам Array<String>
(или, возможно, Array<Any>
в зависимости от карты):
arrayOf(*responseModel.schedule.get("0")).count()
Я не рекомендую такой подход - это переборв вашем случае и снизит производительность.Я упоминаю об этом, потому что это решение .
Как уже упоминал Бокен, вам вообще не нужно оборачивать его в массив.Если вы храните его как карту, у вас уже есть список или массив, и вы можете получить к нему невероятный доступ просто с помощью responseModel.schedule.get("0").size
.
Если вы сохраните его как Any
(что, я полагаю, у вас есть), выПридется добавить дополнительный шаг:
val cache = responseModel.schedule.get("0"); // Any, in reality Array<String>/Array<Any>/List<Any>/List<String>
if (cache is Array) println(cache.size)
else if(cache is List) println(cache.size)
Приведение здесь заключается в том, чтобы получить автоматический вывод типа - если у вас есть Any
, компилятор не знает, имеет ли оно поле size
и поэтому будет выбрасывать исключение.
Конечно, вы можете разыграть его напрямую, но это не очень хорошая идея, если вы когда-нибудь получите другой ввод (намеренно или случайно)
Если, однако,вы на самом деле не храните его в форме карты, что усложняет ситуацию.Чтобы не отставать от первой части, у вас будет Array<JSONObject>
, и у вас будет только один JSONObject в массиве.
В отличие от предыдущей части, вы не можете использовать оператор распространения и получить его прямо в Array
(который, опять же, я не рекомендую вам использовать, если вам не нужно)
Если вы сохраняете JSONObject для любой используемой вами системы, он может иметь поле / функцию размера / длины, которые вы можете использовать, и это не так сложно.В противном случае вам нужно получить массив / список из объекта JSON и выполнить для него длину.Я хотел бы показать вам код для этой части, но, не зная, что вы используете (встроенный, Джексон, Gson и т. Д.), У меня недостаточно подробностей, чтобы показать какой-либо код.Тем не менее, идея по-прежнему заключается в том, чтобы получить размер непосредственно из JSONObject или получить массив, для которого вместо этого можно запустить размер.
Дальнейшее чтение