Chuyển đổi json sang xml nodejs

Hiện tại cũng có một api ứng dụng web này mà bạn có thể sử dụng để chuyển đổi trực tuyến. Xem Sử dụng Apps Script để chuyển đổi xml json

Nội dung trang ẩn

1 Cách sử dụng

2 Kết quả

3

4 Một cách tiếp cận khác.

Cách sử dụng

Hãy bắt đầu với đối tượng JavaScript này mà chúng ta cần chuyển đổi sang XML vì một số lý do không thể giải thích được. Nó chứa các ví dụ về hầu hết các loại nội dung bạn cần tạo. Tất cả các giá trị sẽ được chuyển đổi thành các nút văn bản, không có thuộc tính

var myObject = { 
    "aString": "some string", 
    "aNumber": 8,
    "aBoolean": false,
    "anObject": {
      "apis": [{
        "name":"numbers",
        "url":"http://numbersapi.com/"
      }],
    },
    "anArray":  [
      { "value": 8 , "result": "legs an arachnid has" },
      { "value": 8 , "result": "furlongs in a mile" }
    ],
    "anotherArray":[1,2,3]
	};

Nó có thể được sử dụng như thế này

var root = makeXmlFromOb (myObject , XmlService.createElement('root'));

  // make a documents
  var doc = XmlService.createDocument(root);
  
  // show it
  Logger.log (XmlService.getPrettyFormat().format(doc));

Kết quả

Điều này sử dụng phần tử thẻ để chỉ ra một thành viên của một mảng. Giải pháp thứ hai trên trang này có một cách tiếp cận khác (và tốt hơn)

  some string
  8
  false
  
    
      
        numbers
        http://numbersapi.com/
      
    
  
  
    
      8
      legs an arachnid has
    
    
      8
      furlongs in a mile
    
  
  
    1
    2
    3
  
  

Mật mã

Đó là đệ quy, vì vậy cuối cùng nó chỉ là một vài dòng mã

/**
   * convert json to xml
   * @param {object] ob an object to convert
   * @param {XmlElement} parent usually the root on first call
   * @return {XmlElement} the parent for chaining
   */
  function makeXmlFromOb (ob, parent) {
    // this is recursive to deal with multi level JSON objects
    Object.keys(ob).forEach (function (d) { 
      
      // if the key is numeric, xml will fail, so rename array indices to value
      var child = XmlService.createElement(isNaN(new Number(d)) ? d : 'element' );
      
      // add new created element to the parent
      parent.addContent (child);

      // need to recurse if this is an object/array
      if (typeof ob[d] === 'object' ) {
        
        // the new parent is the newly created node
        return makeXmlFromOb (ob[d] , child );
      }
      else { 
        
        // regular node, set the text to the value
        child.setText(ob[d]);
      }

    });
    
    return parent;
	}

Một cách tiếp cận thay thế

Mảng là những thứ thú vị trong XML, vì chúng được xác định bằng cách lặp lại một thẻ, thay vì được gọi cụ thể là một mảng như trong JSON. Trong ví dụ trên, tôi đã chèn một thẻ mới để xác định các phần tử của một mảng. Vấn đề với phương pháp này là JSON không thể đảo ngược trở lại XML - vì các thẻ mới đã được chèn vào. Cách tiếp cận tốt hơn là sử dụng khóa Mảng làm thẻ được lặp lại

Consider this object.
  var myObject = { 
    "aString": "some string", 
    "aNumber": 8,
    "aBoolean": false,
    "anObject": {
      "apis": [{
        "name":"numbers",
        "url":"http://numbersapi.com/"
      },{
        "name":"faa",
        "url":"http://services.faa.gov/airport/status"
      }],
    },
    "anArray":  [
      { "value": 8 , "result": "legs an arachnid has" },
      { "value": 8 , "result": "furlongs in a mile" }
    ],
    "anotherArray":[1,2,3]
	};

và kết quả sử dụng phương pháp sửa đổi

  some string
  8
  false
  
    
      numbers
      http://numbersapi.com/
    
    
      faa
      http://services.faa.gov/airport/status
    
  
  
    8
    legs an arachnid has
  
  
    8
    furlongs in a mile
  
  1
  2
  3
  

Điều này làm cho xml có thể được đảo ngược trở lại JSON và theo tôi là một giải pháp tốt hơn, ngoại trừ việc các mảng chỉ có 1 thành viên không thể phân biệt được dưới dạng mảng

XML là một định dạng dữ liệu văn bản được tiêu chuẩn hóa và kết quả là nó được sử dụng rộng rãi trong nhiều hệ thống khác nhau. Hai cách sử dụng phổ biến là dành cho sơ đồ trang web và nguồn cấp dữ liệu RSS, cả hai đều có thể sử dụng XML làm định dạng tài liệu. Các cách sử dụng XML khác có thể bao gồm các điểm cuối API RESTful HTTP, cả nhận và trả về các yêu cầu và phản hồi XML. Bài đăng này sẽ bao gồm các bước để chuyển đổi JSON sang XML bằng gói XML npm. Đầu tiên chúng ta sẽ đọc một tệp JSON, chuyển đổi đối tượng JSON thành một chuỗi XML, sau đó ghi chuỗi XML vào một tệp. Bên cạnh việc đọc và ghi tệp, gói XML npm có thể được sử dụng trong các tình huống khác, trong đó không có tệp nào liên quan miễn là định dạng dữ liệu đến là JSON và định dạng đầu ra dữ liệu mong muốn là một chuỗi XML

gói init npm. json

Bạn sẽ không cần phải làm điều này nếu bạn có một Nút hiện có. js nhưng nếu không, hãy đảm bảo cài đặt Node trước. js và npm. Sau đó, trong cửa sổ đầu cuối, hãy mở thư mục mới cho dự án và chạy lệnh npm init, đồng thời làm theo lời nhắc được hiển thị. Gói. tệp json nên được thêm vào thư mục dự án

Chúng tôi cũng cần thực hiện một bổ sung cho gói. json sau khi được tạo để Mô-đun ES có thể được sử dụng với Node. js. Để hỗ trợ Mô-đun ES, hãy thêm thuộc tính "loại" vào gói. đối tượng tệp json với giá trị được đặt thành "mô-đun". Trong các bước sau, chúng tôi sẽ định cấu hình trình biên dịch TypeScript để xuất JavaScript bằng định dạng Mô-đun ES

cài đặt npm

với gói. json được tạo, chúng tôi có thể chạy các lệnh bổ sung để cài đặt các gói npm mà chúng tôi sẽ sử dụng. Trong cùng một thư mục dự án chạy lệnh npm install xml Typescript --save, lệnh này sẽ cài đặt các gói npm XML và TypeScript. Sau đó chạy lệnh khác npm install @types/xml --save-dev. Thao tác này sẽ cài đặt các định nghĩa kiểu TypeScript cho gói XML npm. Gói của bạn. json sẽ trông giống như thế này

{
  "type": "module",
  "name": "convertjsontoxml",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "typescript": "^4.2.3",
    "xml": "^1.0.1"
  },
  "devDependencies": {
    "@types/xml": "^1.0.5"
  }
}

Biên dịch TypeScript

Bây giờ chúng ta đã cài đặt các gói npm XML và TypeScript, chúng ta có thể định cấu hình TypeScript để biên dịch mã của chúng ta để sử dụng với Node. js, bằng cách thêm gói npm. tập lệnh json. Để thực hiện việc này, hãy thêm thuộc tính "tập lệnh" sau vào gói. json được tạo ở bước đầu tiên

{
  "scripts": {
    "compile": "tsc --allowSyntheticDefaultImports --isolatedModules --moduleResolution node --module esnext index.ts"
  }
}

Lệnh biên dịch sẽ gọi trình biên dịch TypeScript với các cờ CLI sẽ tạo đầu ra JavaScript bằng định dạng Mô-đun ES. Điều này sẽ khớp thuộc tính "loại" được đặt thành "mô-đun" trong gói. json đã cấu hình trước đó. Bạn có thể chạy lệnh này bằng npm run compile trong cửa sổ terminal

Tạo nút. tập lệnh js

Tiếp theo chúng ta có thể tạo một Node. js và như được tham chiếu trong gói. json lệnh "biên dịch", tên của tệp này là chỉ mục. ts. Ở đây chúng ta sẽ viết mã TypeScript sẽ sử dụng gói XML npm để tạo chuỗi XML từ một đối tượng JSON. trong chỉ mục. tệp ts thêm đoạn mã sau

________số 8

Thao tác này sẽ thiết lập các câu lệnh nhập cho gói XML npm, đồng thời nhập các hàm readFile và writeFile từ mô-đun nút fs. Vì các chức năng này sử dụng các cuộc gọi lại theo mặc định, nên chức năng promisify được nhập từ mô-đun util để chuyển đổi các hàm readFile và writeFile thành các lời hứa. Bằng cách này, chúng ta có thể sử dụng cú pháp async/await

Đọc tệp JSON

Trong hàm ConvertJsonToXml, điều đầu tiên chúng ta có thể làm là đọc tệp JSON chứa đối tượng JSON mẫu mà chúng ta có thể chuyển đổi thành chuỗi XML. Tạo một tệp mới có tên là "dữ liệu. json" trong cùng một thư mục dự án và thêm đối tượng JSON mẫu này

[
  {
    "name": "Next.js",
    "language": "JavaScript",
    "templates": "React",
    "description": "A framework for statically-exported React apps (supports server side rendering)"
  },
  {
    "name": "Gatsby",
    "language": "JavaScript",
    "templates": "React",
    "description": "Build blazing fast, modern apps and websites with React"
  },
  {
    "name": "Nuxt",
    "language": "JavaScript",
    "templates": "Vue",
    "description": "A minimalistic framework for serverless Vue.js applications."
  }
]

trong chỉ mục. js, bên trong hàm ConvertJsonToXml, chúng ta có thể thêm mã này để đọc tệp JSON và phân tích cú pháp thành một đối tượng JSON với chữ ký loại tương ứng

var root = makeXmlFromOb (myObject , XmlService.createElement('root'));

  // make a documents
  var doc = XmlService.createDocument(root);
  
  // show it
  Logger.log (XmlService.getPrettyFormat().format(doc));
0

Khi tệp json được đọc và lưu dưới dạng biến "staticSiteGeneratorData", chúng ta có thể sử dụng Array. nguyên mẫu. map() để định hình dữ liệu thành định dạng chúng ta cần, để sử dụng gói npm XML để chuyển đổi đối tượng JSON thành chuỗi XML. Bên dưới đoạn mã đang đọc dữ liệu. tệp json thêm mã này

var root = makeXmlFromOb (myObject , XmlService.createElement('root'));

  // make a documents
  var doc = XmlService.createDocument(root);
  
  // show it
  Logger.log (XmlService.getPrettyFormat().format(doc));
1

Kết quả của dữ liệu được gán cho biến "xmlFormattedStaticSiteGeneratorData" sẽ như thế này

var root = makeXmlFromOb (myObject , XmlService.createElement('root'));

  // make a documents
  var doc = XmlService.createDocument(root);
  
  // show it
  Logger.log (XmlService.getPrettyFormat().format(doc));
2

Chuyển đổi tệp JSON thành chuỗi XML

Dữ liệu JSON được gán cho biến "xmlFormattedStaticSiteGeneratorData" hiện ở định dạng phù hợp để sử dụng với gói XML npm. Ngay bên dưới mã định dạng dữ liệu và bên trong hàm "convertJsonToXml", hãy thêm mã sau

var root = makeXmlFromOb (myObject , XmlService.createElement('root'));

  // make a documents
  var doc = XmlService.createDocument(root);
  
  // show it
  Logger.log (XmlService.getPrettyFormat().format(doc));
3

Định dạng của chuỗi xml được gán cho "staticSiteGeneratorXmlString" sẽ giống như thế này

var root = makeXmlFromOb (myObject , XmlService.createElement('root'));

  // make a documents
  var doc = XmlService.createDocument(root);
  
  // show it
  Logger.log (XmlService.getPrettyFormat().format(doc));
4

Viết tệp XML

Chuỗi XML được gán cho biến "staticSiteGeneratorDataXmlString" có thể được ghi vào tệp XML bằng mô-đun writeFile mà chúng tôi đã nhập và quảng cáo ở đầu chỉ mục. tập tin ts. Để ghi chuỗi XML vào một tệp trong cùng thư mục dự án, hãy thêm mã này bên dưới cách sử dụng gói npm XML đã được bao gồm trong bước trước

var root = makeXmlFromOb (myObject , XmlService.createElement('root'));

  // make a documents
  var doc = XmlService.createDocument(root);
  
  // show it
  Logger.log (XmlService.getPrettyFormat().format(doc));
5

Đặt tất cả các mã lại với nhau và chỉ mục. tệp ts sẽ trông như thế này

{
  "scripts": {
    "compile": "tsc --allowSyntheticDefaultImports --isolatedModules --moduleResolution node --module esnext index.ts"
  }
}
0

Chạy nút. js Script với gói npm. Tập lệnh json

Để kiểm tra mã này và chạy Node. js, chúng ta có thể thêm một gói khác. json đầu tiên sẽ biên dịch TypeScript thành JavaScript và sau đó chạy đầu ra JavaScript với Node. js. Trong gói. tệp json thêm một gói mới. json có tên "bắt đầu" giống như thế này

{
  "scripts": {
    "compile": "tsc --allowSyntheticDefaultImports --isolatedModules --moduleResolution node --module esnext index.ts"
  }
}
1

Để sử dụng tập lệnh bắt đầu, hãy chạy lệnh npm run start và sau đó bạn sẽ thấy tệp XML được tạo và lưu vào thư mục dự án. Nội dung của tệp này phải khớp với định dạng của chuỗi XML được hiển thị trước đó. Bất cứ khi nào bạn muốn thay đổi dữ liệu hoặc định dạng, hãy đảm bảo chạy lại npm run start để tạo lại dữ liệu. tập tin xml

Gói XML npm là một cách thuận tiện để chuyển đổi JSON thành XML, miễn là dữ liệu JSON được định dạng phù hợp hoặc có một bước liên quan để định dạng đúng nguồn dữ liệu JSON ban đầu thành định dạng mà gói XML npm yêu cầu. Đối với các cách sử dụng khác của gói XML npm, bạn có thể đọc các bài đăng khác của tôi cho biết cách tạo sơ đồ trang web XML và tạo nguồn cấp RSS XML, như ví dụ này, cả hai bài đăng này đều đang sử dụng Node. js và npm

Làm cách nào để chuyển đổi JSON sang XML nodejs?

sử dụng chức năng chuyển đổi JSON sang XML. const Helper = require('. /your-class-path/Helper') const jsonObj = { "key". 'đối tượng json của bạn' }; . jsonToXml(jsonObj); Vì vậy, sử dụng kỹ thuật đơn giản này, bạn có thể đạt được mục tiêu của mình.

Làm cách nào để phân tích cú pháp JSON thành XML?

Trình chuyển đổi JSON sang XML .
Chọn tác vụ JSON to XML từ menu Công cụ > Công cụ JSON. .
Chọn hoặc nhập URL đầu vào của tài liệu JSON
Chọn đường dẫn của Tệp đầu ra sẽ chứa tài liệu XML kết quả
Chọn tùy chọn Mở trong Trình chỉnh sửa để mở tài liệu XML kết quả trong ngăn chỉnh sửa chính

Làm cách nào để chuyển đổi đối tượng JSON thành XML bằng JavaScript?

Cài đặt xml-js . Sau khi cài đặt, chúng tôi sẽ có thể nhập nó vào một mô-đun JavaScript, như thế này. nhập { json2xml } từ 'xml-js'; .

Làm cách nào để chuyển đổi đối tượng JSON thành chuỗi trong nút JS?

Sử dụng hàm JavaScript JSON. stringify() để chuyển nó thành chuỗi . const myJSON = JSON. xâu chuỗi (obj); .