【问题标题】:JSON parsing multiple nested arraysJSON解析多个嵌套数组
【发布时间】:2019-04-08 22:37:51
【问题描述】:

我正在尝试解析下面的json,它有多个嵌套列表(输入和输出),我该如何解析它?

{
  "status":"current",
  "entry":[{
      "item":{
        "name":"Task1",
        "identifier":"T00001",
        "input":[{
            "type":{
              "text":"InputTask1-1"
            },
            "valueString":"Weekly"
          },
          {
            "type":{
              "text":"InputTask1-2"
            },
            "valueString":"Daily"
          }
        ],
        "output":[{
            "type":{
              "text":"OutputTask1-1"
            },
            "valueString":"Daily"
          },
          {
            "type":{
              "text":"OutputTask1-2"
            },
            "valueString":"Weekly"
          }
        ]
      }
    },
    {
      "item":{
        "name":"Task2",
        "identifier":"T00002",
        "input":[{
            "type":{
              "text":"InputTask2-1"
            },
            "valueString":"Weekly"
          },
          {
            "type":{
              "text":"InputTask2-2"
            },
            "valueString":"Daily"
          }
        ],
        "output":[{
            "type":{
              "text":"OutputTask2-1"
            },
            "valueString":"Daily"
          },
          {
            "type":{
              "text":"OutputTask2-2"
            },
            "valueString":"Weekly"
          }
        ]
      }
    }
  ]
}

寻找这样的分隔输出文件:

"TaskName"|"TaskId"|"InputName"|"InputValue"|"OutputName"|"OutputValue"
Task1|T00001|InputTask1-1|Weekly|outputDummyText|outputDummyValue
Task1|T00001|InputTask1-2|Daily|outputDummyText|outputDummyValue
Task1|T00001|inputDummyText|inputDummyValue|OutputTask1-1|Daily
Task1|T00001|inputDummyText|inputDummyValue|OutputTask1-2|Weekly
Task2|T00002|InputTask2-1|Weekly|outputDummyText|outputDummyValue
Task2|T00002|InputTask2-2|Daily|outputDummyText|outputDummyValue
Task2|T00002|inputDummyText|inputDummyValue|OutputTask2-1|Daily
Task2|T00002|inputDummyText|inputDummyValue|OutputTask2-2|Weekly

【问题讨论】:

    标签: arrays json talend


    【解决方案1】:

    使用KotlinGson 库。

    定义你的模型:

    data class MyData(val status: String, val entry: List<Entry.ItemContainer>) {
    
        data class Entry(val itemContainer: List<ItemContainer>) {
    
            data class ItemContainer(val item: Item) {
    
                data class Item(
                    val name: String,
                    val identifier: String,
                    val input: List<TypeContainer>,
                    val output: List<TypeContainer>
                ) {
    
                    data class TypeContainer(val valueString: String, val type: Type) {
    
                        data class Type(val text: String)
                    }
                }
            }
    
        }
    }
    

    从文件中读取json字符串:

    val json = File("data.json").readText()
    

    使用 Gson 将数据映射到定义的模型:

    val myData = Gson().fromJson<MyData>(json, MyData::class.java)
    

    以所需格式打印结果(或将其保存到文件中):

    println("\"TaskName\"|\"TaskId\"|\"InputName\"|\"InputValue\"|\"OutputName\"|\"OutputValue\"")
    
    for (itemContainer: MyData.Entry.ItemContainer in myData.entry) {
        with(itemContainer.item) {
            for (typeContainer in input) {
                println("$name|$identifier|${typeContainer.type.text}|${typeContainer.valueString}|outputDummyText|outputDummyValue")
            }
    
            for (typeContainer in output) {
                println("$name|$identifier|inputDummyText|inputDummyValue|${typeContainer.type.text}|${typeContainer.valueString}")
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试这个

            JSONObject jsonParent = new JSONObject(response);
            JSONArray jsonarray = jsonParent .getJSONArray("entry");
              for (int i = 0; i < jsonarray.length(); i++) {
                JSONObject c = jsonarray.getJSONObject(i);
              
                JSONObject jsonItem = c.getString("item");
              
                JSONArray inputItemArray = jsonItem.getJSONArray("input");
              
                  for (int j = 0; j < inputItemArray.length(); j++) {
                    JSONObject inputItemObj = inputItemArray .getJSONObject(j);
                    String invalueString = inputItemObj.getSting("valueString ");
                  }
              
                JSONArray outputItemArray = jsonItem.getJSONArray("output");
              
                for (int k = 0; k < outputItemArray.length(); k++) {
                  JSONObject outputItemObj = outputItemArray.getJSONObject(K);
                  String outvalueString = outputItemObj.getSting("valueString ");
                }
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-15
        相关资源
        最近更新 更多