Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA中JSON字符串的扁平化_Java_Json - Fatal编程技术网

JAVA中JSON字符串的扁平化

JAVA中JSON字符串的扁平化,java,json,Java,Json,我用Python编写了一个相当简单的scraper,它从服务器上刮取一个JSON字符串,并将其输出为表/另存为CSV。我现在正试图将我的脚本移植到Java,但我发现学习曲线要陡峭得多 我已经完成了提取字符串的工作,但是在重新创建原始python脚本中压扁JSON字符串的一个嵌套部分时遇到了困难 我的JSON字符串中嵌套的元素如下所示: "workItemProperties":[{"Key":"System.Id","Value":12345},{"Key":"System.Title","Va

我用Python编写了一个相当简单的scraper,它从服务器上刮取一个JSON字符串,并将其输出为表/另存为CSV。我现在正试图将我的脚本移植到Java,但我发现学习曲线要陡峭得多

我已经完成了提取字符串的工作,但是在重新创建原始python脚本中压扁JSON字符串的一个嵌套部分时遇到了困难

我的JSON字符串中嵌套的元素如下所示:

"workItemProperties":[{"Key":"System.Id","Value":12345},{"Key":"System.Title","Value":"Title text here"},{"Key":"System.IterationPath","Value":"Some\Path\Here"},{"Key":"System.ChangedDate","Value":"\/Date(1555424893503)\/"},{"Key":"System.ChangedBy","Value":"Fred Smith <Fred\Smith>"},{"Key":"Microsoft.VSTS.TCM.AutomationStatus","Value":"Not Automated"}]
因此,与其说我的csv有一个单独的列,内容只是嵌套的WorkTempProperties字符串,不如说System.Id、System.Title、System.IterationPath等都在自己的列中

我对编码还相当陌生,并且很难在Java中重新创建上述内容,我假设我需要在JSONArray中循环JSONObject,但似乎无法实现这一点

这是我代码的主要部分(不包括我多次失败的展平/取消嵌套尝试)

我目前正在使用org.json库读取json字符串

电流输出:

期望输出: 试试这个

如果只需要WorkTempProperty的属性

docs = output.getJSONArray("testPoints");
JSONArray  properties= new JSONArray();
for(int i = 0; i < docs.size(); i++)
{
      JSONObject object = docs.getJSONObject(i);
      JSONArray  workItemProperties=object.getJSONArray("workItemProperties");
      JSONObject property=new JSONObject();
      for(int j = 0; j < workItemProperties.size(); j++)
         {
      JSONObject temp=workItemProperties.getJSONObject(j);
      property.put(temp.getString("Key"),temp.getString("Value"));
         }
      properties.put(property);
}

File file=new File("JSONextract.csv");
String csv = CDL.toString(properties);
FileUtils.writeStringToFile(file, csv)
System.out.println(csv);
docs=output.getJSONArray(“测试点”);
JSONArray属性=新的JSONArray();
对于(int i=0;i
否则,

docs = output.getJSONArray("testPoints");
for(int i = 0; i < docs.size(); i++)
{
      JSONObject object = (JSONObject) docs.get(i);
      JSONArray  workItemProperties=object.getJSONArray("workItemProperties");
      for(int j = 0; j < workItemProperties.size(); j++)
         {
      JSONObject property=workItemProperties.getJSONObject(j);
      object.put(property.getString("Key"),property.getString("Value"));
         }
      object.remove("workItemProperties");
}

File file=new File("JSONextract.csv");
String csv = CDL.toString(docs);
FileUtils.writeStringToFile(file, csv)
System.out.println(csv);
docs=output.getJSONArray(“测试点”);
对于(int i=0;i
你能展示你想要的输出吗?我已经用截图更新了我的问题,截图显示了我的csv当前在java代码中的样子,还有一个屏幕截图,显示了我的原始python脚本的外观,WorkItemProperty的内容被拆分为列而不是嵌套。不要将文本作为图像发布,如果你真的认为这是个好主意,那么也可以将纯文本作为图像周围的文本发布。你只需要WorkItemProperty还是当前输出的所有属性除了WorkItemProperty?我得到以下错误:java:34:错误:没有为put(Object,Object)Object.put(property.get(“Key”)、property.get(“Value”))找到合适的方法;这绝对是成功的!非常感谢。必须将第二个循环改为增量J,而不是I,以阻止它无限循环,但一旦我这样做,它就工作得很好。我有点理解你的代码,但我会更多地阅读object.put和property.get(以及更多教程)。
docs = output.getJSONArray("testPoints");
JSONArray  properties= new JSONArray();
for(int i = 0; i < docs.size(); i++)
{
      JSONObject object = docs.getJSONObject(i);
      JSONArray  workItemProperties=object.getJSONArray("workItemProperties");
      JSONObject property=new JSONObject();
      for(int j = 0; j < workItemProperties.size(); j++)
         {
      JSONObject temp=workItemProperties.getJSONObject(j);
      property.put(temp.getString("Key"),temp.getString("Value"));
         }
      properties.put(property);
}

File file=new File("JSONextract.csv");
String csv = CDL.toString(properties);
FileUtils.writeStringToFile(file, csv)
System.out.println(csv);
docs = output.getJSONArray("testPoints");
for(int i = 0; i < docs.size(); i++)
{
      JSONObject object = (JSONObject) docs.get(i);
      JSONArray  workItemProperties=object.getJSONArray("workItemProperties");
      for(int j = 0; j < workItemProperties.size(); j++)
         {
      JSONObject property=workItemProperties.getJSONObject(j);
      object.put(property.getString("Key"),property.getString("Value"));
         }
      object.remove("workItemProperties");
}

File file=new File("JSONextract.csv");
String csv = CDL.toString(docs);
FileUtils.writeStringToFile(file, csv)
System.out.println(csv);