
Research
Node.js Fixes AsyncLocalStorage Crash Bug That Could Take Down Production Servers
Node.js patched a crash bug where AsyncLocalStorage could cause stack overflows to bypass error handlers and terminate production servers.
junit2json
Advanced tools
ts-juni2json provides a converter that convert JUnit XML format to JSON. Also provides TypeScript types definition.
And also provide CLI that can convert a JUnit XML to JSON.
ts-junit2json is created for uploading test result data to BigQuery.
Many languages and test frameworks supporting output test result data as JUnit XML format that de fact standard in today. On the other hand, BigQuery does not support to import XML but does support JSON.
You notice that you can upload test data to BigQuery with converting XML to JSON. ts-junit2json provides a simple JUnit XML to JSON converter for that purpose.
The purpose of other similar tools is handling common XML format. As a result, output JSON structure is sometimes redundant and not suitable for store in BigQuery.
On the other hand, ts-junit2json only supports JUnit XML schema, but restructures original XML structure into a BigQuery friendly structure. Details are described below.
npm install junit2json
junit2json supports both ESModule and CommonJS.
import { parse } from 'junit2json' // ESM
// const { parse } = require('junit2json') // CommonJS
const main = async () => {
const xmlString = `<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="gcf_junit_xml_to_bq_dummy" tests="2" failures="1" time="1.506">
<testsuite name="__tests__/basic.test.ts" errors="0" failures="0" skipped="0" timestamp="2020-01-26T13:45:02" time="1.019" tests="1">
<testcase classname="convert xml2js output basic" name="convert xml2js output basic" time="0.01">
</testcase>
</testsuite>
<testsuite name="__tests__/snapshot.test.ts" errors="0" failures="1" skipped="0" timestamp="2020-01-26T13:45:02" time="1.105" tests="1">
<testcase classname="parse snapshot nunit failure xml" name="parse snapshot nunit failure xml" time="0.013">
<failure>Error: Something wrong.</failure>
</testcase>
</testsuite>
</testsuites>
`
const output = await parse(xmlString)
console.log(JSON.stringify(output, null, 2))
}
main()
junit2json also published to jsr.io as @kesin11/junit2json.
If you using Deno, you can import from jsr as below.
import { parse } from "jsr:@kesin11/junit2json";
{
"name": "gcf_junit_xml_to_bq_dummy",
"tests": 2,
"failures": 1,
"time": 1.506,
"testsuite": [
{
"name": "__tests__/basic.test.ts",
"errors": 0,
"failures": 0,
"skipped": 0,
"timestamp": "2020-01-26T13:45:02",
"time": 1.019,
"tests": 1,
"testcase": [
{
"classname": "convert xml2js output basic",
"name": "convert xml2js output basic",
"time": 0.01
}
]
},
{
"name": "__tests__/snapshot.test.ts",
"errors": 0,
"failures": 1,
"skipped": 0,
"timestamp": "2020-01-26T13:45:02",
"time": 1.105,
"tests": 1,
"testcase": [
{
"classname": "parse snapshot nunit failure xml",
"name": "parse snapshot nunit failure xml",
"time": 0.013,
"failure": [
{
"inner": "Error: Something wrong."
}
]
}
]
}
]
}
If you want to filter out some tags like <system-out> or <system-err>, you can use replacer function argument in JSON.stringify().
const output = await parse(xmlString)
const replacer = (key: any, value: any) => {
if (key === 'system-out' || key === 'system-err') return undefined
return value
}
console.log(JSON.stringify(output, replacer, 2))
ts-junit2json changes the structure of some tags for simpler and more consistent output.
<system-out> and <system-err>. These inner text is set to the string array.npx junit2json junit.xml
# with full options
npx junit2json -p -f system-out,system-err junit.xml
junit2json - Convert JUnit XML format to JSON
Positionals:
path JUnit XML path (use '-' for stdin) [string]
Options:
--help Show help [boolean]
--version Show version number [boolean]
-p, --pretty Output pretty JSON[boolean] [default: false]
-f, --filter-tags Filter XML tag names [string]
Examples:
# Output pretty JSON with filter <system-out> and <system-err> tags.
npx junit2json -p -f system-out,system-err junit.xml
# Pipe node --test junit output into junit2json
node --test --test-reporter=junit ... | npx junit2json -p -
jq examplesnpx junit2json junit.xml | jq .tests
npx junit2json junit.xml | jq .testsuite[].name
npx junit2json junit.xml | jq .testsuite[].testcase[].classname
JUnit XML format
https://jsr.io/@kesin11/junit2json/doc
MIT
FAQs
Convert JUnit XML format to JSON
The npm package junit2json receives a total of 33,994 weekly downloads. As such, junit2json popularity was classified as popular.
We found that junit2json demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
Node.js patched a crash bug where AsyncLocalStorage could cause stack overflows to bypass error handlers and terminate production servers.

Research
/Security News
A malicious Chrome extension steals newly created MEXC API keys, exfiltrates them to Telegram, and enables full account takeover with trading and withdrawal rights.

Security News
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.