【问题标题】:Access values of JSON objects from a JSON array in Servlet (JAVA)从 Servlet (JAVA) 中的 JSON 数组访问 JSON 对象的值
【发布时间】:2014-07-08 18:00:13
【问题描述】:

我在这里困了两天,试图读取存储在 JSONArray 中的 JSONobjects 的值。我使用简单的 JSON,它没有多大帮助!我只能通过类似 jsonstring=JSONArrayName.get(indx); 的方式访问保存 JSONObjects 的 JSONArray 元素。但后来我无法从存储在“jsonstring”字符串中的 JSON 对象中读取值请帮助!请在下面找到我的代码。

ps:我正在使用 $.ajax,我需要存储接收到的值并在我的服务器中处理/使用它

//这是我的客户端代码Login.html


//My servlet code to process json received from client 
BufferedReader reader = request.getReader();
StringBuilder myinputholder = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
    myinputholder.append(line);
}

Object obj = JSONValue.parse(myinputholder.toString());
JSONArray newjsonarr = (JSONArray) obj;
     //  JSONObject newjson= (JSONObject) newjsonarr.get(0); // this line causes errors 
PrintWriter pw = response.getWriter();
String f = JSONValue.toJSONString(newjsonarr.get(0));// this will give me a json object 
         // proper format but I cant do anything with the values inside

JSONValue.writeJSONString(f, pw); // this is only for troubleshooting 

【问题讨论】:

  • “这条线导致错误”不是很有帮助。究竟是什么错误? myinputholder.toString() 的值是多少? “list1”来自哪里,它是什么?如果它与问题无关,请将其从代码示例中删除。
  • 我删除了list1,我之前尝试将数组插入到列表中,我可以但后来我无法访问该元素,所以谢谢你。错误基本上是每当我保留这条线时,我的应用程序就无法正常工作,所以我试图解决这个问题。问题。他们 myinputholder 保存 BufferReader 返回的字符,然后我将这些字符转换为 StringBuilder 中的字符串
  • 使用更简单的库,如 java-json.jar。如果您事先知道 JSON,它具有可以让您更改值的方法。如果您可以发布示例 JSON,我们可能会为您提供更好的帮助。
  • 好的,所以您回答了 list1 问题,但跳过了其他问题。您看到的错误究竟是什么。 “不起作用”不是错误。复制并粘贴错误消息或堆栈跟踪。我已经了解 应该 在 myinputholder 中是什么,但我想知道在 myinputholder 中实际上是什么。这应该给我们一个你试图解析的 JSON 的例子。你确定你有价值吗?真的是数组吗?它包含任何元素吗?最后,正如 jsjunkie 所说,使用真正的库,如 jackson 或 gson。
  • digitaljoel- 我收到服务器内部错误。下面是我传递json数组的ajax函数数据,我在浏览器控制台中查找它,它一直在发送数组[{:“用户名”:“d”,“密码”:“8277e0910d750195b448797616e091ad”}]。这是我通过我的 ajax 函数发送的内容 .. var d= []; d.push('{:"username": "' + usertemp + '", "password": "' + $.md5(passtemp) + '"}');

标签: java ajax json servlets json-simple


【解决方案1】:

我将库更改为杰克逊,它工作得非常好。 我必须对我的字符串进行一些调整,我必须删除字符串开头的引号和结尾的引号“{}”然后我必须用空格替换所有存在的 {} 反斜杠以获得有效的字符串格式 { "Key": "Value", "Key":,"Value"} 因为我的字符串看起来像 "{ \"Key\": \"Value\", \"Key\":,\"Value\" }\"。我可以提取从客户端发送的每个键的每个值。 找到下面的代码。

    String uname="";
    String pass="";
    BufferedReader reader = request.getReader();
    StringBuilder myinputholder = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
        myinputholder.append(line);
    }

    Integer s= myinputholder.length();

    String ss= myinputholder.toString();
    String sss= ss.substring(1, s-1); // this is to avoid the beginning and end "{}"
    sss=sss.replace("\\", ""); \\ this line is to replace all \ with space
    ObjectMapper mapper = new ObjectMapper();
    JsonFactory factory = mapper.getJsonFactory();
    JsonParser jp = factory.createJsonParser(sss);
    JsonNode actualObj = mapper.readTree(jp);
    JsonNode subnode= actualObj.path("username");
    JsonNode subnode2= actualObj.path("password");
    uname= subnode.getTextValue();
    pass=actualObj.get("password").getTextValue();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 2012-11-26
    • 1970-01-01
    • 2018-02-10
    相关资源
    最近更新 更多