js 解析json 常用方法 --前端与后端的交互(前端)

本文详细介绍了前端JavaScript解析JSON数据的方法,包括定义和操作JSON对象与数组,解析后端传来的JSON字符串,以及将JSON对象转换为JSON字符串的过程。

(1)前端js解析前端json数据:

后端java解析json常用方法请参考:java解析json--后端

one:

javascript定义json对象变量:

var jsonobject={};//可以不使用声明,推荐声明一下,严格一些,最好使用严格模式

赋值json对象的key-value值:

jsonobject[key]=value;//不严格的话就直接,var jsonobject={'key':'value',...}

 可以先判断json中是否存在某个key(可以忽略):

if(jsonobject.hasOwnProperty("key")){
   //判断存在之后执行的动作
}

遍历json对象1(分已知key值和未知key值两种方式遍历):

var jsonobject={"name":"张三","sex":"女"}

//1.获取key-value方法(不知道key值的情况):

for(var key in jsonobject){

alert(key);//获取json对象的key

alert(jsonobject[key]);//获取json对象key对应的value值
/*
 使用jsonobject.key是错误的;这会被识别为jsonobject里面存在‘key’这个key值
*/
}

//2.获取value方法(知道key值的情况):

alert(jsonobject.name);

alert(jsonobject.sex);

遍历json对象2:

var jsonobject={

"0":{"name":"2","sex":"1"},

"1":{"name":"3","sex":"7"}

};

for(var key in jsonobject){

alert(key);//获取key

for(var subkey in jsonobject[key]){

alert(jsonobject[key].name)//获取具体key的value值

alert(subkey);//获取子key

//获取subkey的value值(方法行不通:jsonobject[key][subkey],返回的是undefined)

//正确获取subkey的value值

alert(eval("jsonobject[key]."+subkey));

}

}

two:

定义json数组变量:

var jsonarray=[];//跟上面一样,可以不严格

赋值json数组值:  推荐使用jsonarray.push()方法赋值,其他变量,如jsonarray,push(jsonObject)等;

var json={

"name":"1",

"sex":"3"

};

var json2={

"name":"5",

"sex":"7"

};

jsonarray.push(json);

jsonarray.push(json2);

遍历json数组:

for(var i=0;i<jsonarray.length;i++){//或者使用for(var subkey in jsonarray)

alert(jsonarray[i].name)//获取json数组key对应的value

for(var key in jsonarray[i]){

alert(key);//获取json对象key

alert(jsonarray[i][key])//获取json对象value

//不能使用jsonarray[i].key来获取value值,因为它会把key识别成它的属性,变成key值为"key"

}

}

(2) 前端js解析后端json数据字符串

后端传来的json字符串:

jsonstr=[{"RES":"OK","MSG":"success"}]//或jsonstr=[{..},{..},[{..},{..}]]

解析:

var jsonArray=JSON.parse(jsonstr);//一般使用这种方法,将数据转换成JavaScript对象

/*
或var jsonArray=eval('('+jsonstr+')');//此方法不建议用来转json

或var jsonArray=jsonstr.parseJSON();//此方法容易抛语法上的异常,不建议使用

或var jsonobj=jsonArray[i]//赋值给jsonobj变量,对应的是第i个jsonArray值(可以是jsonarray或者jsonobject)
*/

遍历解析同(1)前端js解析前端json数据;

(3)javascript json对象转为json字符串

toJSONString()或者 JSON.stringify(),如由前端请求后端发送ajax请求data参数,

PS:

下面data数据是前端请求给后端的数据,async是否需要同步,success接收请求成功后的数据,存放data中

dataType是后端返回的数据格式:当JSON的话 解析的时候就不用特意转成json对象了,直接使用var xxx=data.xxx接收就可以了,如果是Text的话,需要转成json对象如使用JSON.parse(data)转化一下;剩下的就是自己慢慢参考上面解析了。

$.ajax({

type: "POST",//请求方式

url: '/PostServlet',//指定的链接

data: JSON.stringify({//请求后端的参数

                 tokenID: Token,

                 schema: Schema,

                 funData: JSON.stringify({

                  func: 'doFunc',

                  params: param

             })

           }),

dataType: "JSON",//或"TEXT" //请求返回的数据类型
 async: false,  //是否需要同步
 success: function (data) { //请求返回成功后执行的function
     //后端返回json数据可以在这里,应用上面所说的解析json方法解析
    }

})

 

<think>好的,用户想了解如何在uni-app前端和Django后端之间进行数据交互。首先,我需要回忆一下这两个技术栈的基本特点。uni-app是一个使用Vue.js多端应用的框架,而Django是一个Python的后端框架,提供RESTful API支持。数据交互通常通过HTTP请求完成,比如GET、POST等。 接下来,我应该考虑如何设置Django后端。可能需要使用Django REST framework来创建API,这样uni-app前端就可以通过送HTTP请求来获取或提交数据。要确保Django配置好CORS,因为前端后端可能运行在不同的端口或域名下,跨域问题需要解决。安装django-cors-headers中间件是个常见做法。 然后是uni-app前端的部分。用户需要使用uni.request方法送请求到Django的API端点。需要处理请求的成功和失败情况,可能需要设置请求头,比如Content-Type为application/json。同时,用户可能需要处理身份验证,比如使用JWT,但基础示例可能先不涉及这个,保持简单。 接下来,我需要考虑具体的步骤。例如,创建一个Django模型,然后通过序列化器暴露为API,再设置URL路由。在uni-app中,编写一个起请求的函数,并在页面加载时调用它。 另外,用户提到的引用内容中有一个隐私协议页面的例子,使用的是Vite打包的多入口页面。这可能提示用户对部署和构建流程比较熟悉,所以在教程中可能需要提到生产环境的配置,比如设置Django的ALLOWED_HOSTS和跨域白名单。 还需要检查是否有常见的错误点,比如Django的csrf验证,可能在API场景中需要禁用,或者使用适当的方法处理。此外,数据格式的匹配,比如确保前端送的数据是JSON格式,后端正确解析。 最后,生成相关问题时要覆盖扩展内容,比如身份验证、文件上传、实时通信和HTTPS配置,这些都是实际项目中可能需要的进阶步骤。同时,确保引用正确,用户提供的引用是关于uni-app打包布的,可能数据交互不直接相关,但可能在部署时需要考虑,所以相关问题可以提到部署配置。</think>### uni-app前端Django后端数据交互实现步骤 #### 一、Django后端搭建 1. **创建API接口** - 使用Django REST Framework构建RESTful API: ```python # serializers.py from rest_framework import serializers from .models import DataModel class DataSerializer(serializers.ModelSerializer): class Meta: model = DataModel fields = '__all__' # views.py from rest_framework import viewsets class DataViewSet(viewsets.ModelViewSet): queryset = DataModel.objects.all() serializer_class = DataSerializer ``` - 配置路由: ```python # urls.py from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register(r'data', DataViewSet) ``` 2. **跨域配置** ```bash pip install django-cors-headers ``` ```python # settings.py INSTALLED_APPS = ['corsheaders'] MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware'] CORS_ORIGIN_WHITELIST = ['http://localhost:8080'] # uni-app开服务器地址 ``` #### 二、uni-app前端对接 1. **送GET请求** ```javascript uni.request({ url: 'http://127.0.0.1:8000/api/data/', method: 'GET', success: (res) => { console.log('数据获取成功:', res.data) }, fail: (err) => { console.error('请求失败:', err) } }) ``` 2. **送POST请求** ```javascript uni.request({ url: 'http://127.0.0.1:8000/api/data/', method: 'POST', header: {'Content-Type': 'application/json'}, data: { field1: 'value1', field2: 'value2' }, success: (res) => { console.log('数据提交成功:', res.data) } }) ``` #### 三、部署注意事项 1. 生产环境需配置HTTPS(参考隐私协议页面的部署方式)[^1] 2. 修改Django设置: ```python # settings.py ALLOWED_HOSTS = ['your-domain.com'] CORS_ORIGIN_WHITELIST = ['https://your-frontend-domain.com'] ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值