当前位置: 首页 > 面试题库 >

GWT:处理传入的JSON字符串

安经纶
2023-03-14
问题内容

我正在使用GWT应用程序,该应用程序正在接收JSON字符串,而我很难了解每个对象的值。我正在尝试将传入的JSON字符串传输到对象数组中。

这是JSON(来自Firebug响应选项卡),“ d”是.NET(正在使用的Web服务是C#)。

{
    "d": [
        {
            "__type": "Event",
            "ID": 30,
            "Bin": 1,
            "Date": "\/Date(1281544749000)\/",
            "Desc": "Blue with white stripes.",
            "Category": "1"
        },
        {
            "__type": "Event",
            "ID": 16,
            "Bin": 3,
            "Date": "\/Date(1281636239000)\/",
            "Desc": "Yellow with pink stripes",
            "Category": "1"
        }

    ]
}

我正在尝试将JSON解析为对象,然后将它们插入数组。我能够使用Window.alert并获取整个“
d”对象以进行回显。但是,当我尝试访问数组的元素时,GWT调试器会崩溃。

//My GWT array to receive JSON Array
ArrayList<Item> itemInfo = new ArrayList<Item>();

//Getting response JSON into something I can work with.(THIS FAILS) 
JSONArray jsonValue = JSONParser.parse(incomingJsonRespone);

//Just trying to verify I'm getting values 
for (int i=0; i<jsonValue.size(); i++) {
    JSONValue jsonItem =  = JsonValue.get(i).getString();
    Window.alert(jsonItem);
    itemInfo.add(jsonItem);

}

我认为我已将问题缩小到JSONArray创建实例的位置。我在尝试执行此操作时是否存在明显的错误,因为在错误消息方面我没有得到太多帮助?


问题答案:

回应RMorrisey的评论:
实际上,它更令人费解:/它看起来像这样(未经测试的代码,但您应该了解一般想法):

JSONValue jsonValue;
JSONArray jsonArray;
JSONObject jsonObject;
JSONString jsonString;
jsonValue = JSONParser.parseStrict(incomingJsonRespone);
// parseStrict is available in GWT >=2.1
// But without it, GWT is just internally calling eval()
// which is strongly discouraged for untrusted sources

if ((jsonObject = jsonValue.isObject()) == null) {
    Window.alert("Error parsing the JSON");
    // Possibilites: error during download,
    // someone trying to break the application, etc.
}

jsonValue = jsonObject.get("d"); // Actually, this needs
                                 // a null check too
if ((jsonArray = jsonValue.isArray()) == null) {
    Window.alert("Error parsing the JSON");
}

jsonValue = jsonArray.get(0);
if ((jsonObject = jsonValue.isObject()) == null) {
    Window.alert("Error parsing the JSON");
}

jsonValue = jsonObject.get("Desc");
if ((jsonString = jsonValue.isString()) == null) {
    Window.alert("Error parsing the JSON");
}

Window.alert(jsonString.stringValue()); // Finally!

如您所见,在使用JSONParser时必须/应该非常谨慎-
就是要紧了,对吗?要解析不安全的JSON(否则,就像我在注释中建议的那样,您应该使用JavaScript Overlay
Types)。您得到一个JSONValue,检查它是否确实是您认为的样子,例如,JSONObject得到一个JSONObject,检查它是否具有“
xyz”键,得到一个JSONValue,冲洗并重复。不是最有趣的工作,但至少比调用eval()整个JSON 更安全:)
注意: 正如Jason指出的那样,在GWT
2.1之前,它在内部JSONParser使用eval()(它只有一个parse()方法-GWT 2.0
javadocs与GWT 2.1)。在GWT
2.1中,parse()弃用,并引入了另外两种方法-
parseLenient()eval()内部使用)和parseStrict()(安全方法)。如果您确实需要使用JSONParser,那么我建议您升级到GWT
2.1
M2,因为否则您可能会使用JSO。作为JSONParser不受信任来源的替代方法,您可以尝试通过JSNIjson2.js集成为JSON解析器。

PS:cinqoTimo,JSONArray jsonValue = JSONParser.parse(incomingJsonRespone);显然不起作用,因为JSONParser.parse返回类型为JSONValue,而不是JSONArray-您的IDE(Eclipse+ Google Plugin?)没有警告您吗?或至少是编译器。



 类似资料:
  • 本文向大家介绍如何处理JSON中的特殊字符,包括了如何处理JSON中的特殊字符的使用技巧和注意事项,需要的朋友参考一下 JSON 是适用于 Ajax 应用程序的一种有效格式,原因是它使 JavaScript 对象和字符串值之间得以快速转换。由于 Ajax 应用程序非常适合将纯文本发送给服务器端程序并对应地接收纯文本,相比不能生成文本的 API,能生成文本的 API 自然更可取;而且,JSON 让您

  • StringBuffer 是一个字符串拼接工具,和java中的StringBuilder类似。对于那些需要大量的字符串连接的时候,用 StringBuffer 更高效一些。它实现了以下API: class StringBuffer { public function __construct($str); public function isEmpty(); publi

  • 字符串在我们平常的Web开发中经常用到,包括用户的输入,数据库读取的数据等,我们经常需要对字符串进行分割、连接、转换等操作,本小节将通过Go标准库中的strings和strconv两个包中的函数来讲解如何进行有效快速的操作。 字符串操作 下面这些函数来自于strings包,这里介绍一些我平常经常用到的函数,更详细的请参考官方的文档。 func Contains(s, substr string)

  • 函数 说明 Series.str.capitalize() 将 Series / 索引中的字符串转换为大写。 Series.str.cat([others, sep, na_rep, join]) 使用给定的分隔符连接 Series / 索引中的字符串。 Series.str.center(width[, fillchar]) 用附加字符填充 Series / 索引中字符串的左侧和右侧。 Seri

  • 主要内容:GWT 事件处理,事件处理程序接口,事件方法,GWT 事件处理 示例, GWT 事件处理 GWT 提供了类似于 Java AWT 或 SWING 用户界面框架的事件处理程序模型。 监听器接口定义了一个或多个小部件调用以宣布事件的方法。GWT 提供了对应于各种可能事件的接口列表。 希望接收特定类型事件的类实现关联的处理程序接口,然后将对其自身的引用传递给小部件以订阅一组事件。 例如,Button类发布点击事件,因此您必须编写一个类来实现ClickHandler来处理点击

  • 本文向大家介绍C#实现对Json字符串处理实例,包括了C#实现对Json字符串处理实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现对Json字符串处理方法,分享给大家供大家参考。具体分析如下: 一般对于web应用开发人员来说对Json字符串都会很熟悉,其实在很多请求我们返回的都是Json字符串。那对于C#代码如何处理Json字符串呢,.Net封装了一个类叫做JavaScript