就在今天2018年8月10号 遇到json部分数据丢失很是纳闷:
先来看数据结构:
[{
"b_id": 1,
"father_id": 1,
"children_id": 0,
"text": "工作平台",
"time": 1531735386000,
"name": "AC",
"statu": 0,
"btn_id": 0,
"children": [{
"b_id": 13,
"father_id": 57,
"children_id": 1,
"text": "客户管理",
"time": 1531735454000,
"name": "AC",
"statu": 0,
"btn_id": 0,
"children": [{
"b_id": 14,
"father_id": 58,
"children_id": 57,
"text": "我的客户",
"time": 1531735454000,
"name": "AC",
"statu": 0,
"btn_id": 0,
"children": []
}, {
"b_id": 15,
"father_id": 59,
"children_id": 57,
"text": "公海客户",
"time": 1531735454000,
"name": "AC",
"statu": 0,
"btn_id": 0,
"children": []
}]
}, {
"b_id": 33,
"father_id": 66,
"children_id": 1,
"text": "测试one",
"time": 1532416818000,
"name": null,
"statu": 0,
"btn_id": 0,
"children": [{
"b_id": 34,
"father_id": 67,
"children_id": 66,
"text": "测试two",
"time": 1532417008000,
"name": null,
"statu": 0,
"btn_id": 0,
"children": null
}]
}]
}]
仔细看这个数据结构有什么不同处,仔细观察json key为children 有的是数组,有的是null 这就是部分数据丢失的原因
因为我在递归的时候递归是children数组 所以在当遇到children 为null 的时候 undefined 不继续往下执行
附上代码:
function checkBox(data){
for (var j=0;j<data.length;j++){
checkBox(data[j].children);
解决方案:
1,判断children是不是数组
2,判断数组是不是null 如果是null 跳出循环,进行下一次循环
当然还有其他的解决办法或者产生数据丢失也不止是因为children是null 供参考;
经过一番努力后,所有东西正慢慢变成我想要的样子
就在今天2018年8月10号 遇到json部分数据丢失很是纳闷:先来看数据结构:[{ "b_id": 1, "father_id": 1, "children_id": 0, "text": "工作平台", "time": 1531735386000, "name": "AC", &q
本文实例讲述了
js 递归
json树实现根据子id查父id的方法。分享给大家供大家参考,具体如下:
最近做了一个类似用
js实现思维导图的功能,作为思维导图,一定会有树状结构的
数据产生,在操作里面的节点
时会经常需要查找节点 的父节点及父节点。
对于未知层级的树状
数据,用for循环是无法实现的,因为不知道要循环几层,那么最合适的方法就是用
js递归
界面结构:
json数据:
orgTreeData:{
nodeId:19A5B,
nodeName:预分析用户:1313.85万人,
nodeType:root,
expand:true,
Json对象取对应字段
时,如果多个对象中出现key值缺失,会报keyerror[‘...’],
这个
时候可以采用dict.setdefault(“....”,’ ’),创建缺失的key字段,并给一个默认的值。
在实现一个权限管理系统过程中,用户登录后需要返回该用户可使用的接口地址。可是在返回数据中发少了一些信息。接下来直接看代码。
简单的来说就是获取该表的所有信息。可是得到的结果却是这样的。。
很明显只获取到了id,并没有得到outlink字段信息。接下来检查了一遍代码
@RequestMapping(value = "/login",method=RequestMethod.POST
fastjson是阿里开发的一个javaBean和json解析器和封装器(源码位置),用过几次感觉挺好用的,也是国人的开源项目当然得支持,但最近项目在使用mongodb作为数据库时出现了_id丢失的问题,现将我遇到的问题和解决办法展示一下。
现将错误的程序代码添加上,然后再提供解决方法:
package org.jivesoftwa...
// 获取设备列表,带筛选条件
/lift/devices?pageNo=1&pageSize=10&query={'title':'输入框条件','theOnline':'全部-1,在线1,下线0','status':'全部-1,启用1,停用0','type':'传感器类型'}
解决方...
最近前端在解析后端返回的 json 数据时解析后发现数值类型的精度丢失,长度超过17位后面的所有数都变成 0 ;
var obj = 'var obj = '{"id":50000000000050153333}';
var jsonObj = JSON.parse(obj);
console.log(jsonObj);';
打印的结果为(16位之后都边成0):
50000000000050150000
解决办法:
由于数据是通过第三方接口返回的 xml 字符串转换而来,所以决定在后端将所有字段转成字符
使用ajax获取接口数据,在控制台response处看到的和我用代码在完成接口调用后打印出的数据不一样。如下图:
很奇怪接口传的Device数组有值,但代码打印出来Device却是一个空数组,除Device外其他数据都正常。
受一位大神启发对复杂数据接收应用深拷贝,不能直接“=”赋值,于是我尝试了Object.assign还有JSON.parse(JSON.stringify()),但是,转之后打印的仍然是空数组!将第二种方法直接放入console.log(…)却可以看到Device里有数据
let re
import com.fasterxml.jackson.core.
JsonParseException;
import com.fasterxml.jackson.databind.
JsonMappingException;
import com.fasterxml.jackson.databind.
JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class
JsonTreeDeserializer {
private static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) {
String
json = "{\"id\":1,\"name\":\"root\",\"children\":[{\"id\":2,\"name\":\"child1\",\"children\":[{\"id\":3,\"name\":\"grandchild1\"},{\"id\":4,\"name\":\"grandchild2\"}]},{\"id\":5,\"name\":\"child2\",\"children\":[{\"id\":6,\"name\":\"grandchild3\"},{\"id\":7,\"name\":\"grandchild4\"}]}]}";
try {
JsonNode rootNode = mapper.readTree(
json);
Node tree = deserialize(rootNode);
System.out.println(tree);
} catch (
JsonParseException e) {
e.printStackTrace();
} catch (
JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
public static Node deserialize(
JsonNode node) {
int id = node.get("id").asInt();
String name = node.get("name").asText();
Node tree = new Node(id, name);
JsonNode childrenNode = node.get("children");
if (childrenNode != null && childrenNode.isArray()) {
for (
JsonNode childNode : childrenNode) {
Node child = deserialize(childNode);
tree.addChild(child);
return tree;
class Node {
private int id;
private String name;
private List<Node> children;
public Node(int id, String name) {
this.id = id;
this.name = name;
this.children = new ArrayList<Node>();
public void addChild(Node node) {
this.children.add(node);
@Override
public String toString() {
return "Node [id=" + id + ", name=" + name + ", children=" + children + "]";
这个示例代码使用了 Jackson 库来进行
JSON 反序列化。首先读取
JSON 数据,然后
递归地反序列化每个节点,并构建树形结构。最后输出树形结构。