javascript 使用模式模板将输入JSON对象转换为所需的模式。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 使用模式模板将输入JSON对象转换为所需的模式。相关的知识,希望对你有一定的参考价值。

/**
 * Translate input JSON object to required schema using a schema template.
 * 
 * Input can be any valid JSON object. Schema must have the same keys ad
 * the input object - absent keys will be silently ignored.
 * Schema values must be (Type)newKeyName, there are 4 supported types
 * String, Number, Boolean, Array (Array will join all values with the same
 * newKey name but will leave item type as it was)
 * eg.:
 * 
 * inputData = {
 *  "key1": "product",
 *  "key2": "lorem ipsum dolor sit amet",
 *  "key3": "nice",
 *  "key4": "great",
 *  "key5": "500",
 *  "key6": "0"
 * }
 * 
 * schema = {
 *  "key1": "(String)name",
 *  "key2": "(String)description",
 *  "key3": "(Array)reviews",
 *  "key4": "(Array)reviews",
 *  "key5": "(Number)price",
 *  "key6": "(Boolean)show"
 * }
 * 
 * outputData = {
 *  name: "product",
 *  description : "lorem ipsum dolor sit amet",
 *  reviews: ["nice", "great"],
 *  price: 500,
 *  show: false
 * }
 * 
 */
export const translateToSchema = (data, schema) => {
  let obj = {};
  Object.entries(data).forEach(([key, value]) => {
    let schemakey = schema[key];
    // ignore current pair if not defined in schema
    if (typeof schemakey === 'undefined') return;

    schemakey = schemakey.substr(1).split(')');
    type = schemakey[0];
    name = schemakey[1];

    switch (type) {
      case "Boolean":
        obj[name] = Boolean(value);
        break;
      case "Number":
        obj[name] = Number(value);
        break;
      case "String":
        obj[name] = String(value);
        break;
      case "Array":
        if (typeof obj[name] === 'undefined') {
          obj[name] = [value];
        } else {
          obj[name].push(value);
        }
        break;

      default:
        console.error('unsupported type');
        break;
    }
  });
  return obj;
};

以上是关于javascript 使用模式模板将输入JSON对象转换为所需的模式。的主要内容,如果未能解决你的问题,请参考以下文章