当前位置: 首页 > 知识库问答 >
问题:

批准net json返回额外字符

宗冷勋
2023-03-14

我有这个密码

$ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_HTTPHEADER, Array("'Content-Type: application/json; charset=utf-8'"));
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data_str));
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  $xmlresult = curl_exec($ch);
  $xmlError = $xmlresult;
  $json = json_decode($xmlresult, true);

我将答案转换为json,但无法转换,因为开头的答案是,额外字符请参见示例

п»ї{"customerPaymentProfileIdList":[],"customerShippingAddressIdList":[],"validationDirectResponseList":[],"messages":{"resultCode":"Error","message":[{"code":"E00039","text":"A duplicate record with ID 39223758 already exists."}]}}

响应标头

HTTP/1.1 200 OK缓存控制:私有内容长度:232内容类型:应用程序/json;charset=utf-8服务器:Microsoft IIS/7.5 X-AspNet-Version:2.0.50727 X-Powered-By:ASP。NET访问控制允许来源:*访问控制允许方法:PUT、OPTIONS、POST、GET访问控制允许标头:x-requested-with、cache Control、content type、Origin、method、SOAPAction日期:2016年2月4日星期四09:08:15 GMT连接:keep alive

由于额外的字符,我无法对字符串进行json\U解码。可以做些什么?

共有2个答案

宇文灿
2023-03-14

我在Node.js中遇到了JSON. parse()的相同问题。

var https = require('https');
var requestData = {
  "getCustomerProfileIdsRequest": {
    "merchantAuthentication": {
      "name": "your-auth-name-here",
      "transactionKey": "your-trans-key-name-here"
    }
  }
};
var requestString = JSON.stringify(requestData);
var req = https.request({
  host: "apitest.authorize.net",
  port: "443",
  path: "/xml/v1/request.api",
  method: "POST",
  headers: {
    "Content-Length": requestString.length,
    "Content-Type": "application/json"
  }
});

req.on('response', function (resp) {
  var response = '';

  resp.setEncoding('utf8');
  resp.on('data', function(chunk) {
    response += chunk;
  });
  resp.on('end', function() {
    var buf = new Buffer(response);
    console.log('buf[0]:', buf[0]); // 239 Binary 11101111
    console.log('buf[0] char:', String.fromCharCode(buf[0])); // "ï"
    console.log('buf[1]:', buf[1]); // 187 Binary 10111011
    console.log('buf[1] char:', String.fromCharCode(buf[1])); // "»"
    console.log('buf[2]:', buf[2]); // 191 Binary 10111111
    console.log('buf[2] char:', String.fromCharCode(buf[2])); // "¿"
    console.log('buf[3]:', buf[3]); // 123
    console.log('buf[3] char:', String.fromCharCode(buf[3])); // "{"

    // Note: The first three chars are a "Byte Order Marker" i.e. `BOM`, `ZERO WIDTH NO-BREAK SPACE`, `11101111 10111011 10111111`

    response = JSON.parse(response); // Throws error: 'Unrecoverable exception. Unexpected token SyntaxError: Unexpected token'
    console.log(response);
  });
});
req.on('error', function (error) {
  console.log(JSON.stringify(error));
});

req.on('socket', function(socket) {
  socket.on('secureConnect', function() {
    req.write(requestString);
    req.end();
  });
});

如果对响应调用trim(),它会起作用:

response = JSON.parse(response.trim());

或更换BOM表:

response = response.replace(/^\uFEFF/, '');
response = JSON.parse(response);
周鸿光
2023-03-14

我在开发用于访问JSON API的库时遇到了同样的问题。在处理响应的代码中,我必须去掉这些字符,以便将字符串正确解码为JSON。

第113行:

$this->responseJson = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $responseJson);
 类似资料:
  • 问题内容: 我正在尝试使用BeautifulSoup从html文档中获取一些文本。在我看来,这很奇怪,它产生了一个奇怪而有趣的结果:在某一点之后,汤在文本中充满了多余的空格(空格将每个字母与下一个字母分隔开)。我试图在网络上搜索以找到原因,但是我只遇到了有关相反错误的一些消息(根本没有空格)。 您对它为什么会发生以及如何解决此问题有任何建议或提示吗? 这是我创建的非常基本的代码: 这是从结果中提取

  • 我试图生成一个AES密钥,加密它,并使用RSA解密它。它有点工作,除了解密数据并用Base64编码后,我在实际字符串(Base64编码的AES密钥)之前得到一堆“A”字母。我猜这些是字节中的零。 “RSA/ECB/NoPadd”参数是强制性的。我做错了什么?我需要它来返回原始字符串/字节。 结果如下:

  • 我使用BroadcastReceiver是为了知道耳机是否插到设备上,但在任何情况下,“状态”都会立即返回到1(已插)。 以下是我的代码: 这是我的日志: 我该如何解决这个问题? 提前感谢。

  • 问题内容: 我有这两个课(表) 还有这个: 运行此代码后,在数据库(student_course)中创建了一个额外的表,现在我想知道如何在该表中添加额外的字段,例如(Grade,Date和…(我的意思是student_course表)),我看到了一些解决方案,但我不喜欢它们,而且我对它们有一些问题: 第一个样品 问题答案: 如果在链接表(STUDENT_COURSE)上添加额外的字段,则必须根据s

  • 问题内容: 我正在使用kubernetes python客户端。如果我的代码启动时kubernetes不可用,我想重试连接。 当客户端无法连接时,它会抛出一个异常,因此我从以下内容开始: 但这完全失败了;它的行为就像没有任何声明,并且可以解决: 我以为也许我不像我想象的那样理解继承,所以我将上述内容替换为: 以相同的方式失败。为了弄清楚发生了什么,我添加了一个包罗万象并调用pdb: 从提示符处,我

  • web3.eth.getBalance()方法用来获取指定块中特定账户地址的余额。 调用: web3.eth.getBalance(address [, defaultBlock] [, callback]) 参数: address:String - 要检查余额的账户地址 defaultBlock:Number|String - 可选,使用该参数覆盖web3.eth.defaultBlock属性