我正在尝试在JAVA中重新创建以下JSON。
[{
"Operation": {
Product: "MyProduct",
Noun: "MyNoun",
Verb: "MyVerb"
},
"Authentication": {
UserID: "UserName",
Password: "Password"
}}]
我觉得Maps
是要走的路。但是我在构建合适的结构时遇到了麻烦。
Map<String,String> opsDictionary = new HashMap<String,String>();
opsDictionary.put("Product","MyProduct");
opsDictionary.put("Noun","MyNoun");
opsDictionary.put("Verb", "MyVerb");
Map<String,String> authDictionary = new HashMap<String,String>();
authDictionary.put("UserID","UserName");
authDictionary.put("Password", "Password");
JSONObject postdata = new JSONObject();
postdata.put("Operation", opsDictionary);
postdata.put("Authentication", authDictionary);
哪个吐出 INCORRECT 版本:
{
"Authentication": "{UserID=CADEMO, Password=TESTPASSORD}",
"Operation": "{Noun=User, Product=TOPSInventory, Verb=Authenticate}"
}
我玩弄了捆绑地图的想法
Bundle dataBundle = new Bundle();
dataBundle.putStringArray("Operation", opsDictionary);
dataBundle.putStringArray("Authentication", authDictionary);
我做错了什么?
我能够使用词典在我的iOS版本中复制这种格式。
NSMutableDictionary * dicOperation = [[NSMutableDictionary alloc]init];
[dicOperation setValue:product forKey:@"Product"];
[dicOperation setValue:noun forKey:@"Noun"];
[dicOperation setValue:verb forKey:@"Verb"];
NSMutableDictionary * dicAuthentication = [[NSMutableDictionary alloc] init];
[dicAuthentication setValue:username forKey:@"UserID"];
[dicAuthentication setValue:password forKey:@"Password"];
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dictPackage options:NSJSONWritingPrettyPrinted error:&error];
我希望Android有一个类似的解决方案。
答案 0 :(得分:3)
您不需要使用Hashmap。这可能是导致字符串连接结果的原因。
应该读这个
JSONObject opsDictionary = new JSONObject();
opsDictionary.put("Product","MyProduct");
opsDictionary.put("Noun","MyNoun");
opsDictionary.put("Verb", "MyVerb");
JSONObject authDictionary = new JSONObject();
authDictionary.put("UserID","UserName");
authDictionary.put("Password", "Password");
JSONObject postdata = new JSONObject();
postdata.put("Operation", opsDictionary);
postdata.put("Authentication", authDictionary);
如果您打算创建一个数组,最后附加到一个数组(循环或根据需要):
JSONArray ja = new JSONArray();
ja.put(postdata );
中的代码使用情况
答案 1 :(得分:-1)
我不确定我的回答。由于我使用jsonobject,jsonarray和Gson库,我只使用简单对象(字符串,布尔值,数字等...),“{}”定义的自定义对象和自定义对象数组。
在数组内部,所有元素(自定义或非自定义)都具有相同的结构。因此第一个元素的che字段与第二个元素相同。在你的情况下,我只看到一个关联数组,而不是一个真正的数组。我不确定Gson或json是否提供或对您的数据有用。 也许你必须使用一个自定义对象calles X wheere里面有两个自定义对象Y和Z,因为Y和Z有不同的结构。
但我再说一遍......也许我的想法是错误的。
答案 2 :(得分:-1)
你可以通过使用类创建json的正确结构来实现 序列化,根据需要反序列化。
第一堂课MyOperation
public class MyOperation{
private String Product = "";
private String Noun = "";
private String Verb = "";
//setters and getters
}
第二课MyAuthentication
public class MyAuthentication{
private String UserID = "";
private String Password = "";
//setters and getters
}
和-holder-class MyContent
public class MyContent{
private MyOperation Operation = new MyOperation();
private MyAuthentication Authentication = new MyAuthentication();
//setters and getters
}
您的JSON是MyContent
类型的数组
你可以使用Gson序列化,反序列化:
//serialize example
MyContent myContent[] = new MyContent[1];
myContent[0] = new MyContent();
myContent[0].setMyOperation(....);
myContent[0].setMyAuthentication(....);
Gson gson = new Gson();
String jsonString = gson.toJson(myContent, MyContent[].class);
答案 3 :(得分:-2)
您报告的JSON无效。它并不重要,如果你想使用JSON,你必须遵循JSON规则。 如果您对格式有疑问,可以查看here
某些工作格式可能是这样的
{
"Operation": [
{
"Product": "MyProduct",
"Noun": "MyNoun",
"Verb": "MyVerb"
}
],
"Authentication": [
{
"UserID": "UserName",
"Password": "Password"
}
]
}
通常,JSON可以被认为是树。树的每个节点都可以是:
一个项目
{
"item1Name": "item1Value",
"item2Name": "item2Value",
...
}
数组
[
"val1",
"val2",
...
]
子节点
{
"array": ["arrayitem1", ...],
"itemX": "itemXValue",
...
}
正确的值可以是数字或字符串,正确的&#34;键&#34;可以只是字符串。
在Java中,您可以轻松地将项目映射为Map<String, String>
,将数组映射为List<Map<String,String>>
编辑: 一旦在结构中获得了正确的类,就必须使用正确的序列化器。否则将调用toString()并且错误的结果(如您所示)将出现