正在读取JSON,数据未显示

Reading from JSON, data not displayed

本文关键字:数据 显示 JSON 读取      更新时间:2023-09-26

当我试图从javascript访问json中的元素时,遇到了这个奇怪的问题。我从url中检索一个json字符串,比如

        // Create Request
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"www.someurl.com");
        // Create Client
        WebClient client = new WebClient();
        // Assign Credentials
        client.Credentials = new NetworkCredential("username", "pass");
        // Grab Data
        sjson = client.DownloadString(@"www.someurl.com");
        System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
        oSerializer.MaxJsonLength = Int32.MaxValue;
        sjson = oSerializer.Serialize(sjson);

但是,当我在html代码中从javascript访问这个sjson变量时,它不会返回任何内容,但如果我对它进行硬编码,它会返回值,请对此提供帮助。我尝试了很多东西,但都没用。我还试图只传递检索的json字符串而不进行序列化,当我这样做时,javascript停止工作。:(以下是javascript代码,

    <script type="text/javascript">
    var jsons = JSON.parse('<%=sjson%>');

    function initialize() {
        alert("hahahahaaa");
        document.writeln(jsons.Body[0].RowId.SensorIdValue);
        //document.writeln(myobject.Body[0].RowId.SensorIdValue);
    }
    </script>

问题是

    document.writeln(myobject.Body[0].RowId.SensorIdValue); 

如果我使用myobject变量,但

    document.writeln(jsons.Body[0].RowId.SensorIdValue);

当我将其与解析后的值一起使用时,不返回任何内容。:(

以下是我通过c#、运行序列化程序后得到的json输出(response.write)的示例

请帮我做这件事。。我似乎在这里找不到问题。

编辑:

如果有帮助的话,下面的字符串是我在不进行任何序列化的情况下直接从服务器获得的json字符串,

由于所有者的请求,问题的内容很少被删除

您看到的是双重JSON序列化数据。您从远程服务器检索JSON,然后使用JavaScriptSerializer对其进行第二次JSON编码。这是我在ASMX ScriptServices的背景下写的一篇关于这一点的帖子,它更详细地解释了:http://encosia.com/asp-net-web-services-mistake-manual-json-serialization/.你的情况并不完全相同,但最终结果是。

删除JavaScriptSerializer代码并返回检索到的JSON字符串(sjson),而不是再次序列化它。

您不需要使用Json序列化程序,因为远程服务器已经返回了一个Json编码的字符串,您可以直接在页面中使用该字符串,从而避免双重编码。

因此:

public string GetJson()
{
    // Create Client
    using (WebClient client = new WebClient())
    {
        // Assign Credentials
        client.Credentials = new NetworkCredential("username", "pass");
        // Grab Data
        return client.DownloadString(
            @"www.someurl.com"
        );
    }
}

然后:

<script type="text/javascript">
    var jsons = <%= GetJson() %>;
    function initialize() {
        alert("hahahahaaa");
        document.writeln(jsons.Body[0].RowId.SensorIdValue);
        //document.writeln(myobject.Body[0].RowId.SensorIdValue);
    }
</script>