Tìm kiếm trong Json Object



  • Mình có một json object khá dài như sau

    {
    	comments_id: '1423',
    	replies: [{
    		user_id: '5466',
    		data: '...',
    		time: '2015-11-18T21:43:37.988Z',
    		replies: [{
    			user_id: '1423',
    			data: '...',
    			time: '2015-11-19T14:45:23.235Z',
    			replies:[]
    		}, {
    			user_id: '5466',
    			data: '...',
    			time: '2015-11-19T14:45:23.187Z',
    			replies: [{
    				user_id: '5466',
    				data: '...',
    				time: '2015-11-19T14:45:15.060Z',
    				replies: [...]
    			}, {
    				user_id: '8456',
    				data: '...',
    				time: '2015-11-19T15:15:14.008Z',
    				replies: [{
    					user_id: '5466',
    					data: '...',
    					time: '2015-11-19T15:18:18.008Z',
    				}
    				...]
    			} {
    				user_id: '086',
    				data: '...',
    				time: '2015-11-19T16:45:24.988Z',
    				replies: [...]
    			}]
    		}]
    	}]
    }
    

    Mình muốn tìm kiếm một đoạn text trong trường data của replies mà không biết cách viết thế nào. Đôi khi phải quét rất sâu, mà có hàm trăm reply (ở đây mình cắt đi nhìn cho gọn). Liệu có cách nào tìm kiếm hiệu quả hơn không nhỉ ? Mong các bạn giúp đỡ.



  • mình nghĩ bạn nên query từ database vì nó sinh ra để làm chức năng đó
    chứ viết riêng cũng được nhưng phí thời gian và công sức Each đến bao giờ :))



  • @Hồ-Duy-Quốc-Bảo đoạn json dùng lúc ứng dụng của mình còn chưa nâng cấp, lúc ấy chưa dùng database. Server trước dùng Java và Gson để tạo, giờ mình chuyển sang nodejs vẫn muốn giữ lại số data này.



  • @Ha-Linh bạn import nó vào mongodb và query rất dễ !

    còn code thì dài dòng :))



  • var rs = {};//your json
    rs.replies.filter(usr => /^d+$/.test(user_id));



  • @Nguyen-Van-Hoang ý của bạn đó có nghĩa là có thể nhiều sub con replies nữa

    replies:[
       replies:[
          replies:[
             ...
          ]
       ]
    ]


  • Dưới đây là cách của mình tìm kiếm đệ quy, nếu bạn muốn tìm hiếm trên json như với mongodb thì bạn truyền object vào thay vì str, thêm mắm thêm muối tí chắc cũng ok.
    0_1496927439716_upload-f86d475c-1d65-4906-8fc3-0fff98d6a9d0



  • @Nguyen-Van-Hoang bạn chỉ kiếm đệ quy cấp độ 1 còn cấp độ 2,3,4,5,6,7,8,9 thì phải làm sao :))



  • Cảm ơn mng. Mình đã có phương án giải quyết rồi.



  • @Hồ-Duy-Quốc-Bảo ko hiểu ý bạn, bạn thử chạy xem được ko, mình thấy nó lấy được hết dù data cái replies có sâu tới đâu đi nữa



  • @Nguyen-Van-Hoang đệ quy chậm. Mình thử rồi mới hỏi chớ. H giải pháp là dùng binary gson hoặc dùng keyvalue-pointer của nodejs. thấy keyvalue hay hơn.
    @Hồ-Duy-Quốc-Bảo bạn nghĩ dùng mongo import các tệp 4 - 32mb , có mấy nghìn tệp vì data từ năm 2005 thì liệu có ổn không ? :)


Log in to reply