我有这个代码,字符串来自服务器的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,否
有没有更简单的方法来解决这个问题?我唯一的问题是,当我开始运行程序时,身份验证目录首先出现。有小费吗?我将不胜感激。
提前致谢
答案 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;在第一个周期中。