i created a ArrayList with PersonDto objects and transform it to a json string on the server to send it to the client. in the client i try to parse this string back to the ArrayList of PersonDto objects but only get an Array back
val listPerson = JSON.parse<ArrayList<Person>>(jsonPersonList)
// creates following error
(anonymous function) Uncaught TypeError: listPerson.get_za3lpa$ is not a function
if i change the code to this code, it works
val listPerson = JSON.parse<Array<Person>>(data)
val person = listPerson[0]
is there any possibilty to pass a list from the client to the server using json?
Assuming that ‘data’ is the same as ‘jsonPersonList’, JSON doesn’t have a representation that would distinguish a list from an array. To JSON, it’s all arrays.
So what you would need, is a way for the parser to parse an array into a list instead.
Is there a reason why you need the data in a list, rather than an array?
Cannot you use something like:
val listPerson = JSON.parse<Array<Person>>(data).toList()
?
2 Likes
ok, using toList() works, the only problem is that if i have a dto with lists inside, i have to do this for all lists inside the dto, what makes it more complicated than working with for example Gson
Is there a reason why you can’t work with Arrays? Any APIs that only work with Lists? Perhaps they can be converted as-needed.
Less convenient indeed, but I have no experience with Kotlin/JS, only Kotlin/JVM and use JacksonJson mapping w/Spring, so it uses introspection to figure out the right conversion.
no there is no special reason. i work with lists on the server side and have to work with arrays on the client side, i was hoping that i could use a more similar code for the server and client.
actually the problem seems to be deeper, when i try to get a property of an object which is a list. i have a InitDto with a list of PersonDto objects, which does not work. no matter if i call this line
// list with 6 person objects inside
var person = initDto.listPerson[0]
or this line
var person = initDto.listPerson.get(0)
i always get this error:
main$lambda (anonymous function) Uncaught TypeError: initDto.personList.get_za3lpa$ is not a function
and when i try to iterate the list like this:
initDto.personList.forEach { person ->
}
i get this error:
main$lambda (anonymous function) Uncaught TypeError: initDto.personList.iterator is not a function
i found an extremely ugly workaround. if i add following lines:
val sPersonList = JSON.stringify(initDto.personList)
val personList = JSON.parse<Array<Person>>(sPersonList)
then i can iterate the list of person objects
personList.forEach { person ->
// do someting
}