将来自Web服务的字符串转换为JSON

时间:2014-08-21 13:23:15

标签: javascript php jquery json

我连接到远程数据库,我从数据库中获取了一些统计数据。所以我决定创建一个Web服务并通过它获得所需的数据。数据库服务器是Windows上的SQL Server,我需要在我的PHP网页中显示数据。

首先,我编写了返回类似

的字符串的Web服务
"[
  { 
    "name" : "John", 
    "Age":"54"
  }, 
  {
    "name":"Jack",
    "Age":"33"
  }
 ]"

我使用PHP的file_get_contents()方法得到了这个字符串。

$json = file_get_contents('http://myurl.org/services.asmx/namelistJson');

但是在开始时有一些不需要的标签返回

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://myurl.org/services.asmx?op=namelistJson">

在最后

</string>

我用

清理它们
$json = strip_tags(file_get_contents('http://myurl.org/services.asmx/namelistJson'));

现在我有一个json字符串。

我想将这个字符串用作javascript用于javascript以创建表。

<?php

$json = strip_tags(file_get_contents('http://myurl.org/services.asmx/namelistJson'));

?>
<script>

    var response = $.parse(<?php echo $json; ?>);

    $.each(response, function(i, item) {
        $('<tr>')
                .html("<td>" + response[i].name + "</td>"
                        + "<td>" + response[i].Age + "</td>"
                        )
                .appendTo('#nameList');
    });

</script>

?>
<table id="nameList" class="table">
</table>

我收到有关遗失]符号的错误消息。 FireBug说

  在元素列表

之后

SyntaxError:missing]

如何正确地将字符串转换为json以便在javascript上使用它?

修改

如果我修改了这行

var response = $.parse(<?php echo $json; ?>);

var response = <?php echo $json; ?>;

我仍然遇到]错误。

HTML输出如下:

<script>

...

var response = [{"name" : "John",  "Age" : "14"},  {"name" : "40"}, ... ];

...

</script>

1 个答案:

答案 0 :(得分:1)

无需创建字符串然后再将其转换为json对象,您可以直接从webservice发送json对象并直接在脚本(jquery)中使用它,如下所示:

以下是我的网络服务中的代码

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
public static object GetGridData() 
{
    DataTable dt = GetRecords(); // Fetch the data from sql in form of a datatable
    var returnData = from row in dt.AsEnumerable()
                     select new
                     {
                        Id = row["Id"]  // Here the Id in row["Id"] specifies the column in database
                         name = row["name"],
                         age = row["age"]
                     };
    return returnData;
}

要在jquery中将其作为对象访问,请使用以下代码:

 $.ajax({
                url: 'url of webservice along with method', 
                dataType: 'json',
                contentType: 'application/json; charset=utf-8;',
                tyep: 'GET',
                success: function (datas) {
                    var data = datas.d;
                        $.each(data, function (index, value) {
                        $('<tr>').html("<td>" + value.name + "</td>"+ "<td>" + value.Age + "</td>"
                    ).appendTo('#nameList');
                        });
                },
                error: function (error) {
                    alert('error occured');
                }
            });

但如果您真的想使用字符串发送它并将其解析为json,那么您可以使用

var jsonObject = JSON.parse(jsonstring);

或者你可以通过粘贴jsonlint.com中的json字符串来验证你的json字符串是否有效

希望这会有所帮助:)