【问题标题】:Yet i'm finding difficult to understand JSON然而我发现很难理解 JSON
【发布时间】:2010-12-15 05:23:53
【问题描述】:

大家好,我已经阅读了 This 的帖子,所以我得到的是 JSON 是将 JavaScript 对象转换为 PHP/C# 关联数组或对象的最简单方法(反之亦然)。强>

现在我的问题是下面的代码发生了什么,即没有 JSON/XML 我仍然可以在 Javascript 中访问我的 C# 对象,可能是我错了,如果是,请纠正我:

C#

    Foreach(DataRow dr in dvItems.Table.Rows) //dvItems is a DataView
    {
        strItems &= "'" & dr("ItemTitle") & "',"  //strItems is a String
    }
    strItems = strItems.Trim(",")

Javascript:这里我使用 JQuery 的 Autocomplete.js

   function InitAutocomplete() 
   {
       data = [<%=strItems %>].sort();
       AutoComplete_Create('<%=txtItem.ClientId %>', data);
   }

看到我在带有 servertag 的 javascript 中使用 strItems,那么 JSON 到底在哪里使用? .net 在内部做什么?我很困惑 JSON/XML 是如何用于数据传递的?

【问题讨论】:

    标签: javascript .net xml json


    【解决方案1】:

    虽然您可以在不使用 JSON 的情况下像这样传递数据,但它并不能确保所有数据都可以安全传递,例如嵌入&lt;/script&gt; 标签。使用 JSON 将以一种防止这种情况的方式对您的数据进行编码,并且您可以在 JavaScript 端使用例如json2.js.

    【讨论】:

    • 好吧,只是出于安全考虑,使用 JSON 吗?
    • 其实很少用这个。许多人像您一样将数据直接注入到 JavaScript 中,这会影响安全性和完整性。
    • 你能解释一下这种方法,即直接将数据注入 JavaScript 是不安全的,我只是想知道这种方法有时会失败吗?
    • 假设您的字符串之一由于某种未知原因包含'];&lt;/script&gt;。这将关闭您的脚本块,导致其余部分显示为页面的一部分。这本身不一定是一个安全问题,但它是一个完整性问题。
    • 哦,天哪,我没想到...thanx 伙计,你成就了我的一天
    【解决方案2】:

    您在这里并没有真正使用 JSON。您只是为 javascript 生成一个字符串数组并以非常直接的方式使用它。

    如果您希望将 JSON 转换为 javascript 对象,您需要修改您的程序并且您需要一个 JSON 解析器。 JSON解析器有几种实现,但你提到了jQuery,所以你可以使用:http://api.jquery.com/jQuery.parseJSON/

    然而,使用 jQuery 进行解析需要严格格式化 JSON(从 v1.4 开始)。请参阅http://json.org/ 了解正确的形式。基本上,在您的情况下,您应该在字符串周围加上双引号,并将整个数组放在方括号内。

    你的结果应该是这样的:

    strItems = '['
    Foreach(DataRow dr in dvItems.Table.Rows) //dvItems is a DataView
    {
        // TODO: Escape dr("ItemTitle") so it conforms to http://json.org/ => String
        strItems &= "\"" & dr("ItemTitle") & "\","  //strItems is a String
    }
    strItems = strItems.Trim(",")
    strItems &= ']'
    
    <script type="text/javascript">
        var jsonArr = <%=strItems%>;
        var data = jQuery.parseJSON(jsonArr);
        AutoComplete_Create('<%=txtItem.ClientId %>', data);
    </script>
    

    【讨论】:

    • 不,它应该做的是使用 .NET 库之一来生成 JSON。手动生成 JSON(或任何比纯文本更复杂的交换格式)是一种反模式。
    • 我同意这一点。在这种情况下,应始终首先寻找常用且强大的库。
    • 如果我使用 PHP 会怎样,我应该手动生成 JSON 还是有其他源,对于 .net 有一个用于 JSON 生成的库,而 PHP 呢?
    • Google 发现 php.net/manual/en/book.json.php 用于搜索“php json”(不带引号)。
    • 伙计们,我无法使用JSON 执行此操作,字符串如何转换为 JSON 字符串?因为这里我的strItems 在序列化后输出'mouse','keyboard','Led',它变成"'mouse','keyboard','Led'",并且除了'mouse','keyboard','Led' 格式的数据之外的autocomplete.js ..
    猜你喜欢
    • 1970-01-01
    • 2016-08-01
    • 2021-12-29
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    相关资源
    最近更新 更多