【问题标题】:Removing Some Characters In A JSON Response删除 JSON 响应中的某些字符
【发布时间】:2014-10-23 03:30:20
【问题描述】:

我有一个 JSON 响应作为以下内容,但我的问题是有些字符与我想要的 JSON 响应无关。因此,我已将该 JSON 响应传递给 JavaScript 变量并查看 JSON 字符串。那是在底部。

-----------JSON响应------------

{
   "readyState":4,
   "responseText":"<?xml version=\"1.0\"encoding=\"utf-8\"?>\r\n<string>{\"kind\":\"analytics#gaData\",\"id\":\"https://www.googleapis.com/analytics/v3/data/ga?ids=ga:76546294&dimensions=ga:userType&metrics=ga:users&start-date=2014-10-01&end-date=2014-10-23&max-results=10\",\"query\":{\"start-date\":\"2014-10-01\",\"end-date\":\"2014-10-23\",\"ids\":\"ga:76546294\",\"dimensions\":\"ga:userType\",\"metrics\":[\"ga:users\"],\"start-index\":1,\"max-results\":10},\"itemsPerPage\":10,\"totalResults\":2,\"selfLink\":\"https://www.googleapis.com/analytics/v3/data/ga?ids=ga:76546294&dimensions=ga:userType&metrics=ga:users&start-date=2014-10-01&end-date=2014-10-23&max-results=10\",\"profileInfo\":{\"profileId\":\"76546294\",\"accountId\":\"289147\",\"webPropertyId\":\"UA-289147-1\",\"internalWebPropertyId\":\"456104\",\"profileName\":\"US - Institutional Investors - NP Microsite\",\"tableId\":\"ga:76546294\"},\"containsSampledData\":false,\"columnHeaders\":[{\"name\":\"ga:userType\",\"columnType\":\"DIMENSION\",\"dataType\":\"STRING\"},{\"name\":\"ga:users\",\"columnType\":\"METRIC\",\"dataType\":\"INTEGER\"}],\"totalsForAllResults\":{\"ga:users\":\"1110\"},\"rows\":[[\"New Visitor\",\"826\"],[\"Returning Visitor\",\"284\"]]}</string>",
   "status":200,
   "statusText":"OK"
}

-----------JSON 结束 ------------

我想从字符串的开头删除这些字符:

`{"readyState":4,"responseText":"<?xml version=\"1.0\"encoding=\"utf-8\"?>\r\n<string>`

我想从字符串末尾删除这些字符:

`</string>","status":200,"statusText":"OK"}`

所以我想删除这些字符。我认为要使用一组 JavaScript 字符串函数。但我不知道如何混合使用。

有人可以帮我解决这个问题吗?

感谢和问候, 奇兰塔卡

更新

我使用了以下 AJAX 函数来发送和获取 JSON 响应。

function setJsonSer() {
                formData = {
                'Email': 'clientlink@site.com',
                'Password': 'password1234',
                'URL': getVaria()
            };
                $.ajax({
                url: "/APIWebService.asmx/AnalyticsDataShowWithPost",
                type: 'POST',
                data: formData,
                complete: function(data) {
            var jsonResult = JSON.stringify(data);
            alert(JSON.stringify(data));

            Load(data);

                }
            }); 
    }

更新 02

function setJsonSer() {
                formData = {
                'Email': 'clientlink@russell.com',
                'Password': 'russell1234',
                'URL': getVaria()
            };
                $.ajax({
                url: "/APIWebService.asmx/AnalyticsDataShowWithPost",
                type: 'POST',
                data: formData,
            dataType: 'json',
                complete: function(data) {
            var jsonResult = JSON.stringify(data);

            alert(jsonResult);

            Load(data);

                }
            });                 

    }

【问题讨论】:

  • 您尝试作为 JSON 响应发送的对象是什么?
  • 为什么将 XHR 对象转换为 JSON?只需使用xhr.responseText 获取响应部分。
  • 您需要将xhr.responseText 解析为XML,然后从中获取&lt;string&gt; 元素,并将其解析为JSON 以获得您想要的。
  • 查看更新。但是我还没有将我的 XHR 对象转换为 JSON,但我使用了第 3 方来构建那个 JSON Web 服务。我认为错误是从他们那里开始的。那么我们可以从头到尾做些什么来解决这个问题吗?
  • 实际上 XML 包装不是我做的,而是由创建这个 JSON Web 服务的另一方做的。但现在我想删除它。

标签: javascript json string


【解决方案1】:

我看了你的代码:

complete: function(data) {
  var jsonResult = JSON.stringify(data);

  alert(jsonResult);

  Load(data);
}

所以你想stringify你的自定义结果,但你的结果没有很好地解析JSON*?如果是,那么:

complete: function(data) {
  var responseText = data.responseText;
  var responseJson = JSON.parse(responseText.match(/[{].*.[}]/));
  // you can skip `JSON.parse` if you dont want to leave it as `String` type

  alert(JSON.stringify(responseJson)); //or just `responseJson` if you skip `JSON.parse`

  Load(JSON.stringify(responseJson));
}

这可以暂时解决您的问题。但我认为问题在于您的backend 没有提供解析良好的 JSON 数据。我的建议是先修复你的后端系统。

*没有很好地解析 JSON,因为您的结果在 JSON 对象下包含某种类型的 XML 字符串。

【讨论】:

  • 所以我只想从我的 JSON 响应中删除那个 XML。为此,我尝试使用一些 JavaScript 字符串函数。但我不明白该怎么做。我已经将 JSON 传递给了一个名为 jsonResult 的 JavaScript 字符串变量。
  • 已经试过我的例子了吗?它可以用正则表达式做你所期望的。但这不是一个好的设计,你的数据很混乱,因为它在XML 下有JSONJSON 下。您还可以使用 XML 解析器而不是正则表达式来解析 XML。这取决于你。
  • 安迪的回答解决了这个问题,非常感谢安迪。我也感谢其他朋友帮助解决问题。
  • 你的答案是 6 年后仍然是救命稻草。多谢 。您强调,不是删除垃圾字符,而是从字符串中提取实际的 JSON 并将无效字符留在优秀的先生后面。 .它帮了我很多,节省了我的时间,其他解决方案都不起作用。
【解决方案2】:
  1. 您必须解析 JSON 以获取其中的内容(您有 这样做了)
  2. 您必须解析 XML 以获取 XML 中的文本

以下是 XML 解析的示例代码: http://www.w3schools.com/xml/tryit.asp?filename=tryxml_parsertest2

【讨论】:

    猜你喜欢
    • 2019-04-16
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    相关资源
    最近更新 更多