我需要创建一个对象,其中包含[[{IMEI = 49015420323751]],[{PIN = 538000001}]]等值,以便将其转换为JSON。
现在我正在做的是
ArrayList<ArrayList<HashMap<String,String>>> Request_Identifiers = new ArrayList<ArrayList<HashMap<String,String>>>();
ArrayList<HashMap<String,String>> list1 = new ArrayList<HashMap<String,String>>();
HashMap<String,String> map1 = new HashMap<String,String>();
map1.put("IMEI","49015420323751");
list1.add(map1);
ArrayList<HashMap<String,String>> list2 = new ArrayList<HashMap<String,String>>();
HashMap<String,String> map2 = new HashMap<String,String>();
map2.put("PIN","538000001");
list2.add(map2);
Request_Identifiers.add(list1);
Request_Identifiers.add(list2);
但是我现在需要在Constructor中完成它(比如我如何初始化字符串数组new String [] {“blocked”,“suspended”,“classmask”})或者为此编写一个setter方法。怎么做 ?我真的很困惑。如果有人能帮助我,我会很高兴。
提前致谢。
编辑:
我需要在java中创建一个JSON对象,以便在java中传递一个类似
的请求 {
"attributes": ["blocked", "suspended"],
"authPolicy": ["device_valid"],
"identity": "first_id",
"encoding": "default",
"identifiers":
[
[
{"PIN": "234576"},
{"IMEI": "49015420323751"}
],
[
{"PIN": "68000001"}
]
]
}
所以我正在编写一个java类,并计划使用gson
转换为json格式 class RequestBody
{
String[] Request_Attributes;
String[] Request_Policies;
String Request_Identity;
String Request_Encoding;
Boolean Auth_Client;
Boolean Handle_429;
ArrayList<ArrayList<HashMap<String,String>>> Request_Identifiers;
public RequestBody()
{
Request_Attributes = new String[]{"blocked","suspended","classmask"};
Request_Policies = new String[]{"bbm_meetings"};
Request_Identity = "first_id";
Request_Encoding = "default";
Auth_Client = true;
Handle_429 = true;
}
}
//System.out.println(RequestBody.Request_Identity);
Gson gson = new Gson();
System.out.println(gson.toJson(new RequestBody()));
我不知道这是否会起作用,但这就是解决问题的方法。
对不起,如果这看起来太简陋了,我是编程的初学者。
答案 0 :(得分:5)
如果目标只是将其全部划分为几行,则可以使用double brace / instance initialization。
// Could be one line, but formatted for (some) readability
ArrayList<ArrayList<HashMap<String,String>>> Request_Identifiers = new ArrayList<ArrayList<HashMap<String,String>>>{
{
add(new ArrayList<HashMap<String,String>{{ add( new HashMap<String,String>{{ put("IMEI","49015420323751"); }}; ); }});
add(new ArrayList<HashMap<String,String>{{ add( new HashMap<String,String>{{ put("PIN","538000001"); }}; ); }});
}
};
这显然不是非常易读或可维护。如果您想提供一种更简单的方式来访问您的数据,遵循良好的OO设计模式并创建映射到您的模型的POJO数据对象,这将是一种更好的方法。
// handle your arrays/maps internally as part of the constructor
RequestIdentifiers requestIdentifiers = new RequestIdentifiers( "49015420323751", "538000001" );
答案 1 :(得分:1)
您无法对要创建的列表执行此操作..您必须使用方法add
将值插入列表中。列表不能像匿名数组一样创建。
尽管如此,你可以使用Arrays.asList(T...)
,但在你的情况下不太合适,尽管你可以创建这样的列表
Arrays.asList(Arrays.asList(T...),Arrays.asList(T...),Arrays.asList(T...))
在一天结束时,你必须创建一个你不能这样做的地图。