然而,我发现很难理解JSON

时间:2010-12-15 05:23:53

标签: javascript .net xml json

嘿伙计们,我已经阅读了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);
   }

请参阅我在javascript中使用servertag的 strItems ,那么在哪里使用JSON呢?是.net在内部做什么?我完全混淆了JSON / XML如何用于数据传递?

2 个答案:

答案 0 :(得分:2)

虽然可以在不使用JSON的情况下传递这样的数据,但它并不确保所有数据都可以安全传递,例如嵌入式</script>标记。使用JSON将以防止这种情况的方式对您的数据进行编码,并在JavaScript端对其进行解码,例如: json2.js

答案 1 :(得分:1)

你在这里没有真正使用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>