我正从客户端向我的服务器发送ajax请求。
这是我传递的数据结构:
data = {"key1" : "value1" , "key2" : {"subkey1": "subvalue1" ,"subkey2" : "subvalue2"}};
在服务器端我正在执行以下操作:
private Map<String, Object> parseItemData(HttpServletRequest request) {
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
String paramName = parameterNames.nextElement();
String[] paramValues = request.getParameterValues(paramName);
if(paramName.equals("itemSpecifics"))
{
System.out.println(paramName);
for (int i =0 ; i<paramValues.length; i++)
{
System.out.println(paramName +": "+paramValues[i] );
}
}
}
return item;
}
这是我得到的输出:
itemSpecifics: [object Object]
有什么办法吗?
解决方案:
如果是嵌套键值对,我必须手动使用JSON.stringify()
作为嵌套键值,以便将其作为JSON
发送。
答案 0 :(得分:1)
你可以试试这个。由于sysout
打印[Object,Object],这意味着有两个String对象。
声明像这样声明字符串数组的可能方法
String[] keyValPair = new String[]{"\"key1\" : \"value1\"","key2:{}"}
这只是一个猜测容器如何解析这个类似Json的数据。可以将它转换为两个不同的String对象,将其作为String Array。
String[] paramValues = request.getParameterValues(paramName);
if(paramName.equals("itemSpecifics"))
{
System.out.println(paramName);
String[] paramArr = (String[]) paramValues[0];
String firstKeyVal = paramArr [0];//Contains "key1" : "value1" as String
String secondKeyVal = paramArr [1];//Contains "key2" : {"subkey1": "subvalue1" ,"subkey2" : "subvalue2"} as String
String value1= firstKeyVal.split(":")[1];
String[] subValues = secondKeyVal.substring(secondKeyVal.indexOf("{")+1,secondKeyVal.indexOf("}")).split(",");
String subVal1 = subValues[0].split(":")[1];
String subVal2 = subValues[1].split(":")[1];
System.out.println(paramName+" value1"+value1+" subVal1 "+subVal1+" subVal2 "+subVal2);
}
最好的方法是将所有参数作为JSON传递。
答案 1 :(得分:1)
这可能会对你有帮助。
使用getParameterMap()
方法获取所有键值对。
Map<String, String[]> requestParams = request.getParameterMap();
获取JSONObject的代码:
JSONObject jsonObject=null;
Map<String,String> out = new HashMap<String, String>();
Map<String,String[]> map = request.getParameterMap();
for (Map.Entry<String,String[]> mapEntry : map.entrySet()) {
String value[] = mapEntry.getValue();
Object object = value.length == 1 ? value[0] : value;
try {
jsonObject = new JSONObject((String)object);
parse(jsonObject,out);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
response.getWriter().print(out);
解析json use parse函数:我已经从How can I iterate JSONObject to get individual items
获得了帮助public static Map<String,String> parse(JSONObject json , Map<String,String> out) throws JSONException{
Iterator<String> keys = json.keys();
while(keys.hasNext()){
String key = keys.next();
String val = null;
try{
JSONObject value = json.getJSONObject(key);
parse(value,out);
}catch(Exception e){
val = json.getString(key);
}
if(val != null){
out.put(key,val);
}
}
return out;
}