This commit is contained in:
jpledref 2024-02-04 00:33:35 -08:00 committed by GitHub
commit a944535dec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 86 additions and 0 deletions

11
package-lock.json generated
View File

@ -86,6 +86,7 @@
"ssdeep.js": "0.0.3",
"stream-browserify": "^3.0.0",
"tesseract.js": "3.0.3",
"timers": "^0.1.1",
"ua-parser-js": "^1.0.34",
"unorm": "^1.6.0",
"utf8": "^3.0.0",
@ -12591,6 +12592,11 @@
"dev": true,
"license": "MIT"
},
"node_modules/timers": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/timers/-/timers-0.1.1.tgz",
"integrity": "sha512-pkJC8uIP/gxDHxNQUBUbjHyl6oZfT+ofn7tbaHW+CFIUjI+Q2MBbHcx1JSBQfhDaTcO9bNg328q0i7Vk5PismQ=="
},
"node_modules/timers-browserify": {
"version": "2.0.2",
"dev": true,
@ -22397,6 +22403,11 @@
"version": "1.1.0",
"dev": true
},
"timers": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/timers/-/timers-0.1.1.tgz",
"integrity": "sha512-pkJC8uIP/gxDHxNQUBUbjHyl6oZfT+ofn7tbaHW+CFIUjI+Q2MBbHcx1JSBQfhDaTcO9bNg328q0i7Vk5PismQ=="
},
"timers-browserify": {
"version": "2.0.2",
"dev": true,

View File

@ -168,6 +168,7 @@
"ssdeep.js": "0.0.3",
"stream-browserify": "^3.0.0",
"tesseract.js": "3.0.3",
"timers": "^0.1.1",
"ua-parser-js": "^1.0.34",
"unorm": "^1.6.0",
"utf8": "^3.0.0",

View File

@ -66,6 +66,7 @@
"CSV to JSON",
"JSON to CSV",
"Avro to JSON",
"XML to JSON",
"CBOR Encode",
"CBOR Decode"
]

View File

@ -0,0 +1,49 @@
/**
* @author jpledref [jp.ledref@gmail.com]
* @copyright Crown Copyright 2023
* @license Apache-2.0
*/
import xml2js from "xml2js";
import Operation from "../Operation.mjs";
import OperationError from "../errors/OperationError.mjs";
/**
* XML to JSON operation
*/
class XMLToJSON extends Operation {
/**
* XMLToJSON constructor
*/
constructor() {
super();
this.name = "XML to JSON";
this.module = "Default";
this.description = "Converts XML data to JSON format.";
this.infoURL = "https://wikipedia.org/wiki/XML";
this.inputType = "string";
this.outputType = "JSON";
this.args = [
];
}
/**
* @param {string} input
* @param {Object[]} args
* @returns {JSON}
*/
run(input, args) {
let result;
try {
xml2js.parseString(input, {}, (e, r) => result = JSON.stringify(r));
return JSON.parse(result);
} catch (err) {
throw new OperationError("Unable to parse XML to JSON: " + err.toString());
}
}
}
export default XMLToJSON;

View File

@ -0,0 +1,24 @@
/**
* XML to JSON tests.
*
* @author jpledref [jp.ledref@gmail.com]
* @copyright Crown Copyright 2023
* @license Apache-2.0
*/
import TestRegister from "../../lib/TestRegister.mjs";
const EXPECTED_JSON = { "root": {"shelf": ["over"], "wood": ["do"], "natural": ["sale"]}};
TestRegister.addTests([
{
name: "XML to JSON",
input: "<root>\n<shelf>over</shelf>\n<wood>do</wood>\n<natural>sale</natural>\n</root>",
expectedOutput: EXPECTED_JSON,
recipeConfig: [
{
op: "XML to JSON",
args: []
},
],
}
]);