#java #json #collections #multi-level
#java #json #Коллекции #многоуровневый
Вопрос:
Я пытаюсь преобразовать многоуровневую карту в Json, где уровень карты может быть любым. Например
У меня есть карта, подобная
Map m = new LinkedHashMap();
m.put("data.test[1].tool",6);
m.put("data.test[1].sets",8);
m.put("data.test[2].tool",9);
m.put("data.test[2].sets",12);
m.put("data.tem[1].use[1]",6);
m.put("data.tem[1].use[2]",9);
m.put("data.tut.seh",6)
Я хочу преобразовать это в
{
"data": {
"test": [
{
"tool": 6,
"sets": 8
},
{
"tool": 9,
"sets": 12
}
],
"tem": [
{
"use": [
6,
9
]
}
],
"tut": {
"seh": 6
}
}
}
Что-то вроде правильного json, который также поддерживает порядок, например, значения 6 и 8 принадлежат первому индексу теста, поэтому они должны быть первыми, а второй массив должен содержать 9 и 12 внутри тестового массива. Поскольку этот json будет использоваться позже для получения точного значения на основе индекса.
Если кто-то может дать мне какую-то идею. Заранее спасибо.
Комментарии:
1. Почему вы
put
вводите JSONPaths в карту вместо построения карты для представления структуры объекта (т. Е. Имеете «многоуровневую» карту)?2. Можете ли вы поделиться тем, что вы пробовали?
3. Не используйте «data.test[1].tool» в качестве ключа. Вместо этого проанализируйте эту строку и создайте для сопоставления.
4. Извините за путаницу. На самом деле я не помещаю эти значения в Карту. Здесь я просто создавал карту, чтобы показать, как будут выглядеть значения. Карта, такие значения которой я получаю из какой-то другой функции, которую я не мог контролировать, чтобы изменить ее.
Ответ №1:
Вы можете попробовать использовать класс Bean для хранения данных и получить их оттуда, меня пробовали как там, это может вам помочь!
import java.util.*;
public class Test {
public static void main(String[] args){
System.out.println("Hello World");
/* your code
Map m = new LinkedHashMap();
m.put("data.test[1].tool",6);
m.put("data.test[1].sets",8);
m.put("data.test[2].tool",9);
m.put("data.test[2].sets",12);
m.put("data.tem[1].use[1]",6);
m.put("data.tem[1].use[2]",9);
m.put("data.tut.seh",6);
System.out.println(m);
*/
Map m1 = new LinkedHashMap();
List<String> list = new ArrayList<String>();
list.add("listItem1");
m1.put(new BeanToMap("withList",list),"mapValueWithList");
m1.put(new BeanToMap("test"),"test");
System.out.println(m1);
}
}
Класс Bean — это :
import java.util.*;
public class BeanToMap {
private String name;
private List<String> cars = new ArrayList<String>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BeanToMap(String name, List<String> cars) {
this.name = name;
this.cars = cars;
}
public BeanToMap(String name) {
this.name = name;
}
public List<String> getCars() {
return cars;
}
public void setCars(List<String> cars) {
this.cars = cars;
}
}
вы можете установить все значения в строку, затем вы можете использовать
JSONObject json = new JSONObject();