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

2 篇文章 0 订阅

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里面**不能**出现下面的代码:
<filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
    	<filter-name>characterEncodingFilter</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字符串。如下图所示
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
`json_object_object_get` 函数只能获取 JSON 对象中指定键名对应的值,并不能从 JSON 字符串中取出子 JSON 字符串。不过,可以通过将 JSON 字符串解析为 JSON 对象,再使用 `json_object_object_get` 函数获取子 JSON 对象的方式来实现。 例如,假设有一个 JSON 字符串如下: ``` { "name": "Alice", "age": 18, "address": { "province": "Beijing", "city": "Beijing", "district": "Haidian" } } ``` 如果需要获取其中 `address` 的值,可以使用 `json_tokener_parse` 函数将 JSON 字符串解析为 JSON 对象,然后使用 `json_object_object_get` 函数获取 `address` 对应的子 JSON 对象。接着,可以使用 `json_object_to_json_string` 函数将子 JSON 对象转换为 JSON 字符串,如下所示: ```c struct json_object *obj = json_tokener_parse(json_str); struct json_object *address_obj = json_object_object_get(obj, "address"); if (address_obj != NULL) { const char *address_str = json_object_to_json_string(address_obj); printf("address: %s\n", address_str); } ``` 上述代码中,`json_tokener_parse` 函数用于将 JSON 字符串解析为 JSON 对象,然后使用 `json_object_object_get` 函数获取键名为 `address` 对应的子 JSON 对象。如果查找成功,则使用 `json_object_to_json_string` 函数将该子 JSON 对象转换为 JSON 字符串,并输出该字符串。输出结果如下: ``` address: {"province":"Beijing","city":"Beijing","district":"Haidian"} ``` 需要注意的是,上述代码中获取到的 `address_str` 是一个 JSON 字符串,需要进一步解析才能获取其中的具体值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值