2012-10-25 45 views
15

Tôi có một kịch bản.Biến đổi JSON thành JSON

Đầu vào và đầu ra được yêu cầu là JSON.

// Input 
{ 
    "OldObject": { 
    "Time": 1351160457922, 
    "Name": "OName", 
    "quantity": 100, 
    "price": 10 
    } 
} 


// Output 
{ 
    "NewObject": { 
    "Time": 1351160457922, 
    "Title": "OName", 
    "quantity": 100 
    } 
} 

Tôi cần một số mã chuyển đổi hoặc ngôn ngữ loại xslt tốt nhất để chuyển đổi json từ định dạng này sang định dạng khác. Biến áp này cũng cần phải được nhanh chóng như chuyển đổi sẽ được thực hiện trên bay.

Sửa
Tôi không có định nghĩa của đối tượng đầu vào nhận được và nó có thể thay đổi tại thời gian chạy. nhưng tôi có thể sử dụng lớp cho đối tượng OUTPUT nếu cần. Tôi đã cố gắng thực hiện điều này là json -> xml -> xslt -> xml -> json, nhưng khoảng 1000 đối tượng được nhận mỗi giây vào lúc này và quá trình này có thể phát sinh phí.
Tôi cũng không thể sử dụng JavaScript như myApp đơn giản ứng dụng java dựa trên windows và việc sử dụng JavaScript có thể gây ra chi phí.

+0

vâng, tôi có thể sử dụng javascript. nhưng tốt hơn là ngôn ngữ kiểu xslt và bộ xử lý biến áp –

+3

Còn bản vá JSON thì sao? http://tools.ietf.org/html/draft-pbryan-json-patch-00 –

+1

Bạn có thể tìm thấy các triển khai cho nó, ví dụ: https://github.com/bruth/jsonpatch-js –

Trả lời

4

Bạn có thể sử dụng ZORBA và JsonIQ http://www.jsoniq.org/ Tuy nhiên, đó là một thư viện gốc, nó đi kèm với trình bao bọc để bạn có thể sử dụng nó trong java.

+0

Hãy xem trình bao bọc của tôi quá muộn, có thể hữu ích: https://github.com/mvallebr/ZorbaJavaWrapper – mvallebr

9

Bạn có thể thực hiện chuyển đổi này với JSON patch.

Ví dụ với jsonpatch-js:

var transformations = [ 
    { move: '/OldObject', to: '/NewObject' }, 
    { remove: '/NewObject/price' }, 
    { move: '/NewObject/Name', to: '/NewObject/Title' } 
]; 

var oldObject = { "OldObject": { "Time": 1351160457922, "Name": "OName", "quantity": 100, "price": 10 } }; 

jsonpatch.apply(oldObject, transformations); 

tôi đã không kiểm tra này, nhưng nên làm việc như thế này.

+0

Một chút lo ngại - Liệu điều này có đủ hiệu quả khi Javascript này sẽ phải vá khoảng 1000 đối tượng JSON mỗi giây? –

+0

Nó phụ thuộc vào hoàn cảnh của bạn. Nếu bạn muốn làm điều đó ở phía máy chủ, bạn có thể có các triển khai khác nhau bằng các ngôn ngữ khác nhau. Tôi đã đăng bài này vì có một thẻ javascript trong câu hỏi của bạn. –

+0

Tôi đang sử dụng java và nó sẽ là cửa sổ dựa trên ứng dụng máy tính để bàn. –

14

Hãy thử JOLT. Nó là một thư viện chuyển đổi JSON sang JSON được viết bằng Java. Nó được tạo ra trên một dự án đã chuyển đổi rất nhiều JSON từ một backend "backend" thành api giao diện người dùng.

Đối với JSON biến đổi bạn đã liệt kê trong vấn đề của bạn, Jolt "sự thay đổi" spec sẽ là:

// Jolt "shift" spec 
{ 
    "OldObject": { 
     "Time": "NewObject.Time", 
     "Name": "NewObject.Title", // if the input has "OldObject.Name", copy it's value 
            // to "NewObject.Title 
     "quantity": "NewObject.quantity" 
    } 
} 
0

Bạn có thể thử Java thư viện Silencio cho phép bạn để chuyển đổi từng nút của tệp JSON thành các giá trị mới. Bạn có thể quyết định nút nào và cách chuyển đổi.

0

Một tùy chọn khác là sử dụng thư viện Logz.io Sawmill. Bạn xác định một đường ống và thực hiện nó. Ví dụ:

{ 
    steps: [ 
    { 
     rename { 
     config { 
      from: "OldObject" 
      to: "NewObject" 
     } 
     } 
    } 

    { 
     removeField { 
     config { 
      path: "NewObject.price" 
     } 
     } 
    } 

    { 
     rename { 
     config { 
      from: "NewObject.Name" 
      to: "NewObject.Title" 
     } 
     } 
    } 
    ] 
}