如何使用JavaScript打印JSON对象的特定部分?

时间:2019-10-22 16:09:17

标签: javascript arrays json

我想知道用什么来将文档从JSON转换为数组,并打印用户想要的数组部分。另外,如何将其放在HTML文档中,以便用户可以搜索数组的任何部分。

下面是JSON

{
  "A": {
    "1": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "2": {
      "1\u00ba": [
        "Semestre 1"
      ]
    }
  },
  "B": [

  ],
  "c": {
    "2": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "3": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "44": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "G6": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "GP98": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "654": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "5556": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "7654": {
      "1\u00ba": [
        "Semestre 1"
      ]
    }
  }
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

根据您想要的字符串/字符串集合的外观,可以执行以下选项之一。

JSON.Stringify 会将JavaScript对象或值转换为JSON字符串。

printDataWithStringify = (x) => {
  console.log(JSON.stringify(data[x]))
}

> {"1":{"1º":["Semestre 1"]},"2":{"1º":["Semestre 1"]}}

如果您想走得更远,可以尝试以下代码。

var printedStrings = []

checkNestedData = (x, y) => {

  if (typeof(x[y]) === 'object' && !Array.isArray(x[y][property1])) {
    printedStrings.push(y)
    for (var property1 in x[y]) {
      checkNestedData(x[y], property1)
    }
  } else {
    printedStrings.push(x[y]);
  }

}


printDataWithKeysAndValues = (x) => {
  var part = data[x]
  for (var property1 in part) {
    checkNestedData(part, property1)
  }
  console.log(printedStrings)
}

> 1,1º,Semestre 1,2,1º,Semestre 1

上面的代码利用for...in循环,该循环用于遍历JavaScript对象。 part是您从data(在本例中为x)的键从"A"检索信息时获得的对象。 property1代表当前对象(part)的键,并且是for...in循环的迭代器,当我们遍历part时。

为更进一步,checkNestedData检查当前对象中是否嵌套了另一个对象。如果它是一个对象(没有用于孩子的数组),则将y(记住这是原始循环中的键(property1)推入初始化的printedStrings数组。然后执行另一个循环,然后对新循环中的当前迭代递归运行checkNestedData

此递归回调将一直运行,直到最后一个子代不是填充对象为止。

一旦遍历了整个对象,存储了从对象(包括嵌套对象)中提取的键和值,我们只需console.log最后的数组,该数组将包含所有键和值部分("A")。

根据想要格式化字符串的方式,可以通过插值或串联从字符串中追加/删除内容。但是此解决方案应该为您提供每个键和值,并将它们作为字符串存储在数组中。

var data = {
  "A": {
    "1": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "2": {
      "1\u00ba": [
        "Semestre 1"
      ]
    }
  },
  "B": [

  ],
  "c": {
    "2": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "3": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "44": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "G6": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "GP98": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "654": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "5556": {
      "1\u00ba": [
        "Semestre 1"
      ]
    },
    "7654": {
      "1\u00ba": [
        "Semestre 1"
      ]
    }
  }
}

printDataWithStringify = (x) => {
  console.log('STRINGIFY: ' + JSON.stringify(data[x]))
}

var printedStrings = []

checkNestedData = (x, y) => {

  if (typeof(x[y]) === 'object' && !Array.isArray(x[y][property1])) {
    printedStrings.push(y)
    for (var property1 in x[y]) {
      checkNestedData(x[y], property1)
    }
  } else {
    printedStrings.push(x[y]);
  }

}


printDataWithKeysAndValues = (x) => {
  var part = data[x]
  for (var property1 in part) {
    checkNestedData(part, property1)
  }
  console.log('ALL KEYS AND VALUES: ' + printedStrings)
}


printDataWithStringify("A")
printDataWithKeysAndValues("A")

相关问题