android 中response.json()解析异常



  • fetch(REQUEST_URL)

                                  .then((response) => response.json())
                                  .then((responseData) => {
                                        console.log(responseData).done();
    

    android 报JSON Parse Error:Unrecognized token '?'异常,ios没有问题



  • server那边能联调吗?看下输出?如果不行的话 先用response=>response.text()看下服务器返回的内容。

    通常都是因为服务器返回的内容不是合法JSON,可能是出现了报错等情况。



  • @tdzl2003 text()方法打印出来没有问题,我把内容存在本地也没有问题,ios也没有问题,android这边就说有 中间有‘?’这个东西,不太明白,是不是需要encode之类的



  • 莫不是BOM头?服务端是PHP并且在windows下编写的代码吗?



  • @tdzl2003 我用mac运行的android,访问的服务器是windows的



  • @tdzl2003
    把log打印出来是这个
    { [SyntaxError: JSON Parse error: Unrecognized token '?']
    line: 11706,
    column: 10,
    sourceURL: 'http://10.0.2.2:8081/index.android.bundle?platform=android&dev=true' }



  • 十分怀疑是bom头的影响。能不能用别的二进制工具查看下server的返回值?



  • 我是 JSON Parse Error:Unrecognized token '<' 出现这样的保存又是何解呀???



  • 我在开发过程中,也遇到过相同的问题,我现在已经解决。
    问题的原因是:
    返回的json字符串中含有隐藏的非法字符,可以这样解决
    .then((response) => response.text())
    .then((text) => {
    if (Platform.OS === 'android') {
    text = text.replace(/\r?\n/g, '').replace(/[\u0080-\uFFFF]/g, ''); // If android , I've removed unwanted chars.
    }
    return text;
    })
    .then(response=> {
    ToastAndroid.show(JSON.parse(response).status, ToastAndroid.LONG)
    })
    .catch((error) => {
    ToastAndroid.show(error.toString(), ToastAndroid.LONG)
    console.warn(error);
    });


登录后回复