JSON to Java。中导出.txt顺序

时间:2015-10-22 14:12:08

标签: java json parsing output

我有这个代码,字符串来自服务器的JSON,我使用这些if语句来优先处理我想要导出到文本文件的内容,但是当我运行它时,输出不是输出我我期待,见下文:

JSONObject attributeObject = objects.getJSONObject(objectAttribute);
String[] elementList = JSONObject.getNames(attributeObject);

for (String attributeName : elementList) {
if (attribute.equals("Custodian")){
    String value = objects.getString("attributeValue");
    System.out.print(value+",");
    out.write(value);
    out.append(",");
}
if (attribute.equals("Custodian Delegate")){
    String value = objects.getString("attributeValue");
    System.out.print(value+",");
    out.write(value);
    out.append(",");
}

if (attribute.equals("Authentication Directory")){
    String value = objects.getString("attributeValue");
    System.out.print(value+",");
    out.write(value);
    out.append(",");
}
if (attribute.equals("User ID")){
    String value = objects.getString("attributeValue");
    System.out.println(value);
    out.write(value);
    out.append(",");
    out.newLine();
    }  
}

基于if语句的预期输出:
JDoe,CPer,Active Directory,否

但是一旦我运行它,输出变为:
Active Directory,JDoe,CPer,否

有没有更简单的方法来解决这个问题?我唯一的问题是,当我开始运行程序时,身份验证目录首先出现。有小费吗?我将不胜感激。

提前致谢

2 个答案:

答案 0 :(得分:0)

通过创建Model

让您的生活更轻松
class Model{

  String JDoe="";  //this is an example, so change attribute names using naming convention
  String CPer="";
  String Active_Directory=""; 
  String No="";

  @Override
  public String toString(){
    return JDoe+", " +CPer+", " +Active_Directory+", " + No;
  }
}

现在更改您的代码以使用此模型,并且只更新类Model而不向文件写入任何内容。

例如:

Model model = new Model();
...
for(whatever condition is){ //start of the loop
  if (attribute.equals("Custodian")){
    String value = objects.getString("attributeValue");
    model.CPer=value;
    //System.out.print(value+",");
    //out.write(value); <-- skip this
    //out.append(",");  <-- skip this
  }
  ...
}
//after the loop 
 out.write(model.toString());

注:

如果您有两个循环Model model = new Model(); 在你的外部循环中

答案 1 :(得分:0)

输出可能是正确的。您正在迭代JSON对象的所有键。生成的订单不依赖于您的if-satements的顺序。在每个循环中只有一个if条件匹配。给定的代码段将以与返回数组中相同的顺序输出元素。

.getNames()返回给定Object的字段名称数组。然后,您将迭代这些字段名称。因此,属性值将在每个周期具有相同的值。两个if条件不可能匹配,因为属性不能等于例如&#34; Custodian&#34;和#34;托管代表&#34;在同一时间。

似乎数组包含按字母顺序排列的属性。因此,attributeName-variable是&#34; Authentication Directory&#34;在第一个周期中。