微信小程序> 小程序get和post包含中文数据(解决乱码问题)的Json字符串

小程序get和post包含中文数据(解决乱码问题)的Json字符串

浏览量:3452 时间: 来源:仕兴

1 小程序以GET方式获取服务端的JSON字符串

服务端返回的JSON字符串

{  "resourceType": "Patient",  "id": "2",  "extension": [    {      "url": "http://example.com#userage",      "valueString": "321"    }  ],  "identifier": [    {      "id": "123456789"    }  ],}

微信小程序请求的代码如下:

wx.request({      url: 服务器的URL,       method: 'GET',      success(res) {        let patient = res.data        that.setData({          identifier: patient.identifier[0].id,          userage: patient.extension[0].valueString        })      }    })

要想保证小程序解析的中文数据没有乱码问题,就必须做两件事情:
1. 在Controller类中的相应方法的头部加如下代码(这里用的是Spring MVC框架实现,Controller类就是控制器):

@RequestMapping(value = "/映射路径", method = RequestMethod.GET, produces="text/html;charset=UTF-8")
2. 在JavaWeb项目的web.xml里面**不能**出现下面的代码:
filterfilter-namecharacterEncodingFilter/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-paraminit-paramparam-nameforceEncoding/param-nameparam-valuetrue/param-value/init-param/filterfilter-mapping    filter-namecharacterEncodingFilter/filter-name    url-pattern/*/url-pattern  /filter-mapping 

2 小程序以POST方式向服务器推送带中文的JSON字符串。

2.1  定义json对象,具体代码如下:

var myjsonData = {你自己的key:value}

2.2  将上一步的json对象转为json字符串,具体代码如下:

myjsonData = JSON.stringify(myjsonData)  //将myjsonData引用的JSON对象转为JSON字符串并保存到myjsonData中

2.3  header中的Content-Type的值不是application/json!而是application/x-www-form-urlencoded;charset=utf-8,具体代码如下:

wx.request({      url: 服务器的URL,       method: 'POST',      data:{        jsonData: myjsonData      },      header: {        'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'      },       success(res) {        wx.showToast({          title:'保存成功',          icon: 'success',          duration: 2000        })      },      fail(res) {        wx.showToast({          title: '保存失败',        })      }    })

2.3  服务器端的Controller类中的处理方式的具体代码如下:

@RequestMapping(value = "/路径", method = RequestMethod.POST, produces="text/html;charset=UTF-8")public String updateUserById(HttpServletRequest request) {String jsonStr= request.getParameter("jsonData");System.out.println("你小程序传递过来的json字符串:" + jsonStr); //没有乱码问题}

3 为什么2中的POST提交数据的代码要这样写?

如果你的代码写成下面这样:

wx.request({      url: API_URL + that.data.patientId,       method: 'POST',      data:{        //这里是多组key : value      },      header: {        'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'      },       success(res) {        wx.showToast({          title:'保存成功',          icon: 'success',          duration: 2000        })      },      fail(res) {        wx.showToast({          title: '保存失败',        })      }    })

从微信开发者工具中的调试窗口中的Network看到的是:你提交的数据是Form Data(键值对),而不是JSON字符串!
因为微信小程序解析到’Content-Type’: ‘application/x-www-form-urlencoded;charset=utf-8’,所以提交的是Form Data。所以解决思路如下:那既然小程序提交的是Form Data,那可以把一个JSON字符串当做一个value值,而key值可以取任何值。即你的Form Data只需要包含一组键值对,在这一组键值对中,key是任意值,而value是你的JSON字符串。如下图所示
小程序

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎