2012-10-09 34 views
8

Tôi gặp vấn đề tôi muốn giải quyết để không phải tốn nhiều công sức thủ công để phân tích thay thế.JSON khác với dữ liệu JSON lớn, tìm một số JSON dưới dạng tập hợp con của một JSON khác

Tôi có 2 đối tượng JSON (được trả về từ API dịch vụ web hoặc phản hồi HTTP khác nhau). Có dữ liệu giao nhau giữa 2 đối tượng JSON và chúng chia sẻ cấu trúc JSON tương tự, nhưng không giống nhau. Một JSON (cái nhỏ hơn) giống như một tập con của đối tượng JSON lớn hơn.

Tôi muốn tìm tất cả dữ liệu xen kẽ giữa hai đối tượng. Trên thực tế, tôi quan tâm nhiều hơn đến các tham số/thuộc tính được chia sẻ trong đối tượng, không thực sự là giá trị thực của các tham số/thuộc tính của từng đối tượng. Bởi vì tôi muốn cuối cùng sử dụng dữ liệu từ một đầu ra JSON để xây dựng JSON khác làm đầu vào cho một cuộc gọi API. Thật không may, tôi không có tài liệu định nghĩa JSON cho mỗi API. :(

Điều gì làm cho điều này trở nên khó khăn hơn là các đối tượng JSON rất lớn. Một trang mở rộng nếu bạn in nó ra thông qua Windows Notepad và một trang khác sẽ mở rộng 37 trang. so sánh không làm nhiều, tôi sẽ phải định dạng lại bằng tay hoặc w/script để chia nhỏ đối tượng w/newlines, v.v. cho một văn bản so sánh để hoạt động tốt.Được thử với công cụ Beyond Compare. tìm kiếm/grep nhưng đó là một cơn đau để chu kỳ thông qua tất cả các tham số bên trong JSON nhỏ hơn. Có thể viết mã để làm điều đó nhưng tôi cũng phải dành thời gian để làm điều đó, và kiểm tra xem mã có hoạt động hay không. đã tạo mã cho điều đó ...

Hoặc có thể tìm kiếm các công cụ loại khác biệt JSON. Đã tìm kiếm một số. Đi qua những:

https://github.com/samsonjs/json-diff hoặc https://tlrobinson.net/projects/javascript-fun/jsondiff

https://github.com/andreyvit/json-diff

cả thất bại trong việc làm những gì tôi muốn. Có lẽ JSON quá phức tạp hoặc quá lớn để xử lý.

Bất kỳ suy nghĩ nào về giải pháp tốt nhất? Hoặc có thể giải pháp tốt nhất hiện nay là phân tích thủ công w/grep cho mỗi tham số/thuộc tính?

Xét về giải pháp mã, mọi ngôn ngữ sẽ thực hiện. Tôi chỉ cần một công cụ phân tích cú pháp hoặc khác biệt sẽ làm những gì tôi muốn.

Xin lỗi, không thể chia sẻ cấu trúc dữ liệu JSON với bạn, nó có thể được coi là bí mật.

+0

Bạn lưu ý rằng bạn có thể dễ dàng khá-in dữ liệu JSON với dòng mới và thụt đầu dòng? –

+0

FWIW: 37 trang hiển thị văn bản JSON nằm cách xa "rất lớn"; Tôi sẽ không coi sự kiện đó là "lớn", mà đúng hơn là "không nhỏ". –

+0

@ user1689607, làm thế nào để bạn in khá dữ liệu JSON? Tôi không phải là một nhà phát triển web ajax/jquery/js, đã không thực hiện công nghệ web dev w/mới nhất, chỉ làm công cụ không ajax năm trở lại. Tôi chỉ cần thử nghiệm các ứng dụng hiện nay. – David

Trả lời

1

Tôi có một dự án GPL nhỏ sẽ thực hiện thủ thuật cho JSON đơn giản. Tôi đã không thêm hỗ trợ cho các thực thể lồng nhau vì nó là nhiều hơn một giải pháp ObjectDB đơn giản và không thực sự JSON (Mặc dù thực tế nó đã được lấy cảm hứng từ nó một cách rõ ràng.)

API ngắn và dài này khá đơn giản. cư nó, và sau đó kéo một tập hợp con qua bất cứ thông số logic bạn cần

https://github.com/danielbchapman/groups

API được sử dụng về cơ bản thích -.>

SubGroup items = group 
        .notEqual("field", "value") 
        .lessThan("field2", 50); //...etc... 

có thực sự hỗ trợ cho công đoàn cơ sở và tham gia mà sẽ làm khá nhiều những gì bạn muốn.

Dài và ngắn bạn có thể muốn Đặt làm loại dữ liệu của bạn. Xem xét các so sánh của bạn có lẽ là phức tạp, bạn cần một bộ phương pháp phức tạp hơn.

Cảnh báo duy nhất của tôi là GPL. Nếu dữ liệu của bạn được bảo mật, tỷ lệ cược là bạn có thể không quan tâm đến giấy phép đó.

+0

cảm ơn, tôi sẽ xem xét điều đó đôi khi, không chắc chắn nếu đó là những gì tôi cần mặc dù. – David

8

Beyond Compare hoạt động tốt, nếu bạn thiết lập định dạng tệp JSON trong đó để sử dụng Python để in đẹp JSON. Thiết lập mẫu cho Windows:

  1. Cài đặt Python 2.7.
  2. Trong Ngoài So sánh, hãy chuyển đến Công cụ, trong Định dạng tệp.
  3. Nhấp vào Mới. Chọn định dạng văn bản. Nhập "JSON" làm tên.
  4. Dưới tab General:
    • Mask: *.json
  5. Dưới tab Conversion:
    • chuyển đổi: chương trình bên ngoài (Unicode tên tập tin)
    • Chở Hàng: c:\Python27\python.exe -m json.tool %s %t
      • Lưu ý, thông số thứ hai trong dòng lệnh phải là %t, nếu bạn nhập hai %s giây, bạn sẽ bị mất dữ liệu.
  6. Nhấp vào Lưu.
+1

Tôi phải nhập "c: \ Python27 \ python.exe -m json.tool% s% t" cho đường dẫn tải (% t thay vì% s cho biến thứ hai). –

2

Jeremy Simmons đã tạo gói Định dạng tệp tốt hơn Posted on forum: "JsonFileFormat.bcpkg" cho BEYOND COMPARE không yêu cầu cài đặt python hoặc cài đặt.

Chỉ cần tải xuống tệp và mở tệp đó với BC và bạn sẵn sàng sử dụng. Vì vậy, nó đơn giản hơn nhiều.

JSON File Format

tôi cần một định dạng tập tin cho các tập tin JSON.

Tôi muốn in đẹp & sắp xếp JSON của mình để so sánh dễ dàng.

Tôi đã đính kèm gói bcpackage của mình với Định dạng tệp JSON đã hoàn thành của tôi.

Các định dạng được thực hiện thông qua JQ - http://stedolan.github.io/jq/

Props để Stephen Dolan cho tiện ích https://github.com/stedolan.

Tôi đã gửi một tin nhắn tới những người ở Phần mềm Scooter yêu cầu họ đưa nó vào trang có định dạng bổ sung.

Nếu bạn quan tâm đến việc xem nó trên đó, tôi chắc chắn một câu trả lời nhanh chóng cho chủ đề có phiếu bầu sẽ giúp họ thấy giá trị đăng lên đó. tập tin đính kèm File Kèm Theo Kiểu File: bcpkg JsonFileFormat.bcpkg (449,8 KB, 58 lượt xem)

+0

Hmm ... Tôi tự hỏi phiên bản này hoạt động với các bước cài đặt chính xác. Trên máy Mac có BC4. Trên Công cụ> Cài đặt nhập, chọn tệp pkg đã tải xuống, sau đó màn hình tiếp theo là chọn định dạng tệp để nhập & trống, và không thể tiếp tục, trừ khi tôi chọn hộp kiểm "xóa tất cả các định dạng tệp hiện có", nhưng tôi không Tôi cho rằng đó là ý tưởng hay, tôi dừng lại ở đó. – David

+0

@David - Tôi đang sử dụng trên BC3 + Windows 8.1 x 64. Vấn đề là nó sử dụng Windows .exe, vì vậy tôi không chắc chắn làm thế nào để đặt nó trên máy Mac. Mặc dù phiên bản OSX của Ứng dụng cũng tồn tại. Bạn có thể muốn thử điều này trên Windows để kiểm tra và/hoặc liên hệ với tác giả của gói về cách thực hiện nó cho Mac. Suy nghĩ của tôi là nó không phải là phức tạp để làm như vậy trên Mac - Nhưng, kể từ khi tôi không có một tôi không thể tìm ra cho bạn. –

+0

@David - Tôi đã đăng một giải pháp dựa trên BC cho SQLite - tại đây: http://sqa.stackexchange.com/a/14283/13028 - Phần này hiển thị cách cấu hình các loại tệp trên BC. Cả hai đều là Phần mở rộng tệp do người dùng đóng góp cho BC. Một gói được đóng gói sẵn, phần còn lại có phần Cách thực hiện. Hãy cho tôi biết nếu điều đó làm việc cho bạn. Nếu không, tôi sẽ cố gắng giúp bạn với điều này khi tôi có thêm thời gian PS: Một lần nữa, tôi không có một máy Mac vì vậy tôi không thể kiểm tra nó cho chắc chắn. –

Các vấn đề liên quan