Java 使用JQuery解析JSON有困难

Java 使用JQuery解析JSON有困难,java,javascript,jquery,json,dom,Java,Javascript,Jquery,Json,Dom,我开发了一个应用程序,将twitter搜索结果作为JSON对象写入结果页面,如下所示: for (Status tweet : tweets) { Map<String, String> tweetResult = new LinkedHashMap<String, String>(); tweetResult.put("username", tweet.getUser().getScreenName()); tweetResult.put("st

我开发了一个应用程序,将twitter搜索结果作为JSON对象写入结果页面,如下所示:

for (Status tweet : tweets) {
    Map<String, String> tweetResult = new LinkedHashMap<String, String>();
    tweetResult.put("username", tweet.getUser().getScreenName());
    tweetResult.put("status", tweet.getText());
    tweetResult.put("date", tweet.getCreatedAt().toString());
    tweetResult.put("retweets", String.valueOf(tweet.getRetweetCount()));
    String resultJson = new Gson().toJson(tweetResult);
    response.getWriter().write(resultJson);
}

提前谢谢

看来您的序列化是错误的。因为您正在生成一系列未正确封装在数组中的串联JSON对象

[{"username":"Dineen_","status":"RT @TwitterAds: Learn how to put Twitter to work for your small business! Download our small biz guide now: https://t.co/gdnMMYLI","date":"Tue Feb 26 08:37:11 GMT 2013","retweets":"22"}]
当前无效的JSON响应:

{ ... } { ... } { ... } { ... }
而预期的JSON响应应该是:

[ { ... }, { ... }, { ... }, { ... } ]
不需要手工操作。如果您构造了正确的对象,Gson可能会自动为您执行此操作。例如,使用以下未经测试的内容:

List<Map<String, String>> tweetList = new LinkedList<Map<String, String>>();
for (Status tweet : tweets) {
    Map<String, String> tweetResult = new LinkedHashMap<String, String>();
    tweetResult.put("username", tweet.getUser().getScreenName());
    tweetResult.put("status", tweet.getText());
    tweetResult.put("date", tweet.getCreatedAt().toString());
    tweetResult.put("retweets", String.valueOf(tweet.getRetweetCount()));
    tweetList.add(tweetResult);
}
String resultJson = new Gson().toJson(tweetList);
response.getWriter().write(resultJson);

看来你的序列化是错的。因为您正在生成一系列未正确封装在数组中的串联JSON对象

[{"username":"Dineen_","status":"RT @TwitterAds: Learn how to put Twitter to work for your small business! Download our small biz guide now: https://t.co/gdnMMYLI","date":"Tue Feb 26 08:37:11 GMT 2013","retweets":"22"}]
当前无效的JSON响应:

{ ... } { ... } { ... } { ... }
而预期的JSON响应应该是:

[ { ... }, { ... }, { ... }, { ... } ]
不需要手工操作。如果您构造了正确的对象,Gson可能会自动为您执行此操作。例如,使用以下未经测试的内容:

List<Map<String, String>> tweetList = new LinkedList<Map<String, String>>();
for (Status tweet : tweets) {
    Map<String, String> tweetResult = new LinkedHashMap<String, String>();
    tweetResult.put("username", tweet.getUser().getScreenName());
    tweetResult.put("status", tweet.getText());
    tweetResult.put("date", tweet.getCreatedAt().toString());
    tweetResult.put("retweets", String.valueOf(tweet.getRetweetCount()));
    tweetList.add(tweetResult);
}
String resultJson = new Gson().toJson(tweetList);
response.getWriter().write(resultJson);

我认为问题在于你对美元的使用。由于您正在传入一个对象,因此每个对象都在对象的键值对上迭代。看

您可能希望返回一个用方括号括起来的JSON对象,以便它在数组中迭代

[{"username":"Dineen_","status":"RT @TwitterAds: Learn how to put Twitter to work for your small business! Download our small biz guide now: https://t.co/gdnMMYLI","date":"Tue Feb 26 08:37:11 GMT 2013","retweets":"22"}]

编辑:正如Alexander所指出的,您可以返回与已返回的对象相同的对象,但不使用$。每个对象。我的回答假设您希望能够传回多个对象,并将每个对象插入表行。

我认为问题在于您对$.each的使用。由于您正在传入一个对象,因此每个对象都在对象的键值对上迭代。看

您可能希望返回一个用方括号括起来的JSON对象,以便它在数组中迭代

[{"username":"Dineen_","status":"RT @TwitterAds: Learn how to put Twitter to work for your small business! Download our small biz guide now: https://t.co/gdnMMYLI","date":"Tue Feb 26 08:37:11 GMT 2013","retweets":"22"}]

编辑:正如Alexander所指出的,您可以返回与已返回的对象相同的对象,但不使用$。每个对象。我的回答假设您希望能够传回多个对象,并将每个对象插入表行。

最好显示实际的HTML结果seeing@richardb如果执行console.loglist,会得到什么结果?Alexander,html结果与上面相同。没有呈现任何内容,甚至没有呈现预期结果的标记。您的问题似乎在浏览器中,而不是Java部分。为了简洁起见,我将删除这一部分,只询问javasript/json/htmlseeing@richardb如果执行console.loglist,会得到什么结果?Alexander,html结果与上面相同。没有呈现任何内容,甚至没有呈现预期结果的标记。您的问题似乎在浏览器中,而不是Java部分。为了简洁起见,我删除了这一部分,只询问javasript/json/html。嗨,Alexander,我尝试了您提供的代码,但仍然没有呈现表。Firebug显示它可以很好地获取数据,例如搜索术语Twitter导致:Firebug控制台显示GET-response JSON对象,但Chrome上的开发控制台没有显示任何内容?即使代码中包含console.logtweet?但这两种方法都没有呈现表,甚至没有呈现它应该呈现的标记。@richardb,只是为了澄清一下。推特被填充了吗?你能在Firebug或Chrome Developer Tools显示响应时向我们展示一下吗?嗨,Alexander,我已经为Alexander拍摄了一些控制台的屏幕截图,其中包含了结果,还有。我还在$.getJSON调用之后添加了一个console.logtest,但正如您在控制台中看到的,它没有记录在那里,我也不完全确定为什么,因为该函数似乎至少可以在servlet上调用doGet。谢谢你的帮助,非常感谢。只是为了跟进一下。我把console.logtest放进去。ready被调用,它很好地登录到控制台。如果我将其移动到$.getJSON,它将不会登录到控制台。如果我将测试记录到控制台和$.getJSON之外,它也可以正常工作,因此$.getJSON调用和之后立即发生的事情之间似乎存在一些问题。嗨,Alexander,我尝试了您提供的代码,但仍然没有呈现表。Firebug显示它可以很好地获取数据,例如搜索术语Twitter导致:Firebug控制台显示GET-response JSON对象,但Chrome上的开发控制台没有显示任何内容?即使代码中包含console.logtweet?但这两种方法都没有呈现表,甚至没有呈现它应该呈现的标记。@richardb,只是为了澄清一下。推特被填充了吗?你能在Firebug或Chrome Developer Tools显示响应时向我们展示一下吗?嗨,Alexander,我已经为Alexander拍摄了一些控制台的屏幕截图,其中包含了结果,还有。我还在$.getJSON调用之后添加了一个console.logtest,但正如您在控制台中看到的,它没有记录在那里,我也不完全确定为什么,因为该函数似乎至少可以在servlet上调用doGet。谢谢你的帮助,非常感谢。只是为了跟进一下。我把控制台放在logtest上 调用in.ready并将其登录到控制台。如果我将其移动到$.getJSON,它将不会登录到控制台。如果我将测试记录到控制台和$.getJSON之外,它也可以正常工作,因此$.getJSON调用和随后发生的事情之间似乎存在一些问题。