Provides a DataSchema implementation which can be used to work with delimited text data.
See the apply
method for usage.
_parseResults
schema
text_in
data_out
Schema-parsed list of results from full data
Parsed data object.
apply
schema
data
Applies a schema to a string of delimited data, returning a normalized
object with results in the results
property. The meta
property of
the response object is present for consistency, but is assigned an
empty object. If the input data is absent or not a string, an error
property will be added.
Use schema.resultDelimiter and schema.fieldDelimiter to instruct
apply
how to split up the string into an array of data arrays for
processing.
Use schema.resultFields to specify the keys in the generated result
objects in response.results
. The key:value pairs will be assigned
in the order of the schema.resultFields array, assuming the values
in the data records are defined in the same order.
schema.resultFields field identifiers are objects with the following properties:
key
: (required) The property name you wantthe data value assigned to in the result object (String)
parser
: A function or the name of a function on Y.Parsers
usedto convert the input value into a normalized type. Parser
functions are passed the value as input and are expected to
return a value.
If no value parsing is needed, you can use just the desired property name string as the field identifier instead of an object (see example below).
schema
Object
Schema to apply. Supported configuration properties are:
resultDelimiter
String
Character or character sequence that marks the end of one record and the start of another.
[fieldDelimiter]
String
optional
Character or character sequence that marks the end of a field and the start of another within the same record.
[resultFields]
Array
optional
Field identifiers to assign values in the response records. See above for details.
data
String
Text data.
An Object with properties results
and meta
// Process simple csv
var schema = {
resultDelimiter: "\n",
fieldDelimiter: ",",
resultFields: [ 'fruit', 'color' ]
},
data = "Banana,yellow\nOrange,orange\nEggplant,purple";
var response = Y.DataSchema.Text.apply(schema, data);
// response.results[0] is { fruit: "Banana", color: "yellow" }
// Use parsers
schema.resultFields = [
{
key: 'fruit',
parser: function (val) { return val.toUpperCase(); }
},
'color' // mix and match objects and strings
];
response = Y.DataSchema.Text.apply(schema, data);
// response.results[0] is { fruit: "BANANA", color: "yellow" }