Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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 JsonSyntaxException:应为字符串,但为BEGIN\u数组_Java_Parsing_Exception_Gson_Pojo - Fatal编程技术网

Java JsonSyntaxException:应为字符串,但为BEGIN\u数组

Java JsonSyntaxException:应为字符串,但为BEGIN\u数组,java,parsing,exception,gson,pojo,Java,Parsing,Exception,Gson,Pojo,请帮助我获取bom表属性中的子节点列表 JSON文件 [ { "subConfigId":"bac", "totalPrice":"634.00", "bom":{ "ucid":"ucid", "type":"RootNode", "attributes":{ "visible":true, "price_status":"SUCCESS" }, "subnodes":[

请帮助我获取bom表属性中的子节点列表

JSON文件

[  
 {  
  "subConfigId":"bac",
  "totalPrice":"634.00",
  "bom":{  
     "ucid":"ucid",
     "type":"RootNode",
     "attributes":{  
        "visible":true,
        "price_status":"SUCCESS"
     },
     "subnodes":[  
        {  
           "description":"Enterprise Shock Rack",
           "ucid":"ucid"
        },
        {  
           "description":"SVC",
           "ucid":"ucid"
        }
     ]
  },
  "breakdown":{  
     "SV":550.0,
     "HW":6084.0
  },
  "currency":"USD"
 }
]
GsonNodes.java

 import java.io.FileReader;
 import java.io.IOException;
 import java.util.Iterator;
 import com.google.gson.Gson;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonParser;

  public class GsonNodes {
  public static void main(String[] args) throws IOException {   

    try{                 
     JsonElement je = new JsonParser().parse(new FileReader(
             "C:/Desktop/json.txt"));
     JsonArray ja = je.getAsJsonArray();
     Iterator itr = ja.iterator();

     while(itr.hasNext()){
         JsonElement je1 = (JsonElement) itr.next();
         Gson gson = new Gson();
         Details details = gson.fromJson(je1, Details.class);          

         System.out.println(details.getSubConfigId());
         System.out.println(details.getCurrency());
         System.out.println(details.getBreakdown());
         System.out.println(details.getTotalPrice());
         System.out.println(details.getBom().getUcid());         

     }
  } catch (Exception e) {
  e.printStackTrace();
  }
}
}
Details.javapojo

    import java.io.Serializable;
    import java.util.Map;
    public class Details implements Serializable{

        private String subConfigId;
        private String totalPrice;
        private Bom bom;     
        private String currency;
        private Map<String, String> breakdown;

        public String getSubConfigId() {
            return subConfigId;
        }
        public void setSubConfigId(String subConfigId) {
            this.subConfigId = subConfigId;
        }
        public String getTotalPrice() {
            return totalPrice;
        }
        public void setTotalPrice(String totalPrice) {
            this.totalPrice = totalPrice;
        }
        public Bom getBom() {
            return bom;
        }
        public void setBom(Bom bom) {
            this.bom = bom;
        }
        public String getCurrency() {
            return currency;
        }
        public void setCurrency(String currency) {
            this.currency = currency;
        }
        public Map<String, String> getBreakdown() {
            return breakdown;
        }
        public void setBreakdown(Map<String, String> breakdown) {
            this.breakdown = breakdown;
        }
    }
import java.io.Serializable;
导入java.util.Map;
公共类详细信息实现可序列化{
私有字符串子类figid;
私有字符串总价格;
私有物料清单;
私人字符串货币;
私人地图分类;
公共字符串getSubsubfigid(){
返回分包figid;
}
public void setSubConfigId(字符串subConfigId){
this.subsubfigid=subsubfigid;
}
公共字符串getTotalPrice(){
返回总价;
}
公共无效setTotalPrice(字符串totalPrice){
this.totalPrice=totalPrice;
}
公共Bom getBom(){
返回bom;
}
公共空立根(Bom){
this.bom=bom;
}
公共字符串getCurrency(){
返回货币;
}
公共无效设置货币(字符串货币){
这个。货币=货币;
}
公共地图getBreakdown(){
退货明细表;
}
公共空间退避区(地图细分){
这个.分解=分解;
}
}
java

    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;

    public class Bom implements Serializable{

        private String ucid;
        private String type;
        private Map<String, String> attributes;
        private List<Subnodes> subnodes = new ArrayList<Subnodes>();  

        public String getUcid() {
            return ucid;
        }
        public void setUcid(String ucid) {
            this.ucid = ucid;
        }
        public String getType() {
            return type;
        }
        public void setType(String type) {
            this.type = type;
        }
        public Map<String, String> getAttributes() {
            return attributes;
        }
        public void setAttributes(Map<String, String> attributes) {
            this.attributes = attributes;
        }   

        @Override
        public String toString(){
            return getUcid() + ", "+getType()+", "+getAttributes();
        }

    }
import java.io.Serializable;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Map;
公共类Bom实现了可序列化{
私有字符串ucid;
私有字符串类型;
私有地图属性;
私有列表子节点=新的ArrayList();
公共字符串getUcid(){
返回ucid;
}
公共无效设置ucid(字符串ucid){
this.ucid=ucid;
}
公共字符串getType(){
返回类型;
}
公共void集合类型(字符串类型){
this.type=type;
}
公共映射getAttributes(){
返回属性;
}
公共void集合属性(映射属性){
this.attributes=属性;
}   
@凌驾
公共字符串toString(){
返回getUcid()+“,“+getType()+”,“+getAttributes()”;
}
}
Subnodes.java

    import java.io.Serializable;
    import java.util.Map;

    public class Subnodes implements Serializable{

        private String description;
        private String ucid;
        private Map<String, String> attributes;

        public String getDescription() {
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
        public String getUcid() {
            return ucid;
        }
        public void setUcid(String ucid) {
            this.ucid = ucid;
        }
        public Map<String, String> getAttributes() {
            return attributes;
        }
        public void setAttributes(Map<String, String> attributes) {
            this.attributes = attributes;
        }   
    }
import java.io.Serializable;
导入java.util.Map;
公共类子节点实现可序列化{
私有字符串描述;
私有字符串ucid;
私有地图属性;
公共字符串getDescription(){
返回说明;
}
公共void集合描述(字符串描述){
this.description=描述;
}
公共字符串getUcid(){
返回ucid;
}
公共无效设置ucid(字符串ucid){
this.ucid=ucid;
}
公共映射getAttributes(){
返回属性;
}
公共void集合属性(映射属性){
this.attributes=属性;
}   
}
我尝试获取“子节点”时出错 我在类中添加了以下代码

  private List<Subnodes> subnodes = new ArrayList<Subnodes>();
private List subnodes=new ArrayList();
然后,我得到了错误“预期字符串,但是BEGIN\u数组”

请帮助我如何获得Bom.java中的“子节点”列表

请为以下内容添加一个getter/setter方法:

private List<Subnodes> subnodes = new ArrayList<Subnodes>();

public List<Subnodes> getSubnodes() {
    return subnodes;
}

public void setSubnodes(List<Subnodes> subnodes) {
    this.subnodes = subnodes;
}

我添加了一个将json转换为字符串的方法,如下所示:

    public static String readFile(String filename) {
        String result = "";
        try {
            BufferedReader br = new BufferedReader(new FileReader(filename));
            StringBuilder sb = new StringBuilder();
            String line = br.readLine();
            while (line != null) {
                sb.append(line);
                line = br.readLine();
            }
            result = sb.toString();
        } catch(Exception e) {
            e.printStackTrace();
        }
        return result;
    }
并使用如下方法:

            JsonElement je = new JsonParser().parse(readFile("C:/Desktop/json.txt"));

我试过了,但是我得到了以下错误java.lang.IllegalStateException:应该是字符串,但在com.google.gson.internal.bind.jsonterereader.nextString(jsonterereader.java:154)com.google.gson.internal.bind.TypeAdapters$13.read(TypeAdapters.java:349)上是BEGIN\u数组。你能分享完整的堆栈跟踪吗?谢谢patel。。如何像这样转换“[{\”subsubfigid\”:“bac\”,“totalPrice\”无需转换为字符串..它也可以像您一样处理json文件。它可能会产生依赖性问题…我在下面使用了依赖性..com.google.code.gson gson 2.1它也可能会产生文件问题..请尝试创建新的json文件
            JsonElement je = new JsonParser().parse(readFile("C:/Desktop/json.txt"));