add 'from ndjson' into standard library (#10283)

close #8574
related #10276 
# Description

added below into standard library
```
def "from ndjson" []: string -> any {
    from json --objects
}
```

# User-Facing Changes


Users can use functions like "from ndjson" in standard library, and can
open ndjson files with `open` command.
```
use std formats *
# `from ndjson` is available now
open sample.ndjson
```

# Tests + Formatting

`toolkit check pr`

- 🟢 `toolkit fmt`
- 🟢 `toolkit clippy`
- 🟢 `toolkit test`
- 🟢 `toolkit test stdlib`


# After Submitting

---------

Co-authored-by: Stefan Holderbach <sholderbach@users.noreply.github.com>
This commit is contained in:
Yuto 2023-09-11 21:59:07 +09:00 committed by GitHub
parent 7b89fab327
commit c761f7f844
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 75 additions and 0 deletions

View File

@ -28,6 +28,7 @@ pub fn load_standard_library(
("xml.nu", include_str!("../std/xml.nu")),
("input.nu", include_str!("../std/input.nu")),
("math.nu", include_str!("../std/math.nu")),
("formats.nu", include_str!("../std/formats.nu")),
];
let mut working_set = StateWorkingSet::new(engine_state);

View File

@ -0,0 +1,20 @@
# formats.nu
#
# This file contains functions for formatting data in various ways.
#
# Usage:
# use std format *
# use std format <function name>
#
# These functions help `open` the files with unsupported extensions such as ndjson.
#
# Convert from ndjson to structured data.
export def "from ndjson" []: string -> any {
from json --objects
}
# Convert from jsonl to structured data.
export def "from jsonl" []: string -> any {
from json --objects
}

View File

@ -0,0 +1,54 @@
use std assert
def ndjson_test_data1 [] {
'{"a":1}
{"a":2}
{"a":3}
{"a":4}
{"a":5}
{"a":6}'
}
#[test]
def from_ndjson_multiple_objects [] {
use std formats *
let result = ndjson_test_data1 | from ndjson
let expect = [{a:1},{a:2},{a:3},{a:4},{a:5},{a:6}]
assert equal $result $expect "could not convert from NDJSON"
}
#[test]
def from_ndjson_single_object [] {
use std formats *
let result = '{"a":1}' | from ndjson
let expect = [{a:1}]
assert equal $result $expect "could not convert from NDJSON"
}
#[test]
def from_ndjson_invalid_object [] {
use std formats *
assert error { '{"a":1' | from ndjson }
}
#[test]
def from_jsonl_multiple_objects [] {
use std formats *
let result = ndjson_test_data1 | from jsonl
let expect = [{a:1},{a:2},{a:3},{a:4},{a:5},{a:6}]
assert equal $result $expect "could not convert from JSONL"
}
#[test]
def from_jsonl_single_object [] {
use std formats *
let result = '{"a":1}' | from jsonl
let expect = [{a:1}]
assert equal $result $expect "could not convert from JSONL"
}
#[test]
def from_jsonl_invalid_object [] {
use std formats *
assert error { '{"a":1' | from jsonl }
}