System.JSONException:当前上下文不是ARRAY而是OBJECT

时间:2017-10-28 11:55:12

标签: java json salesforce salesforce-lightning

我有一个自定义的Salesforce对象Category__c,它可以自我查找最多3个级别。我编写了下面的代码来从这个对象构造一个JSON。但是我遇到了运行时错误:

  

System.JSONException:当前上下文不是ARRAY而是OBJECT

有人可以指出我在哪里出错。

我发现以下帖子与此错误相关,但我无法与之相关,因为它位于不同的平台中。 ElasticSearch:Current context not an ARRAY but OBJECT when trying to index an array

Apex代码:

public class lsRestResourceHandler {
public static String getCategoriesJSON() {
    
        boolean l2fieldset = false;
        
        //Query list of Categories
        list<Category__c> lstCategories = new list<Category__c>([SELECT Parent_Category__r.Level__c
                                                                , Parent_Category__r.Id
                                                                , Parent_Category__r.Name
                                                                , Level__c
                                                                , Id
                                                                , Name
                                                                , (SELECT Level__c, Id, Name FROM SubCategories__r) 
                                                                FROM Category__c WHERE Level__c=2 OR Level__c=1]);
        Set<Id> setParentCategories = new Set<Id>();
        for(Category__c category:lstCategories) {
            setParentCategories.add(category.Parent_Category__r.Id);
        }
        //Start JSON Generator
        JSONGenerator categoryJSON = JSON.createGenerator(true);
        categoryJSON.writeStartObject();
        categoryJSON.writeFieldName('Categories');
        categoryJSON.writeStartArray();
        //Iterate through 1st level1 Categories            
        for(Category__c level1:lstCategories) {            
            if(level1.Level__c == 1){
                categoryJSON.writeStartObject();
                categoryJSON.writeStringField('Id',level1.Id);
                categoryJSON.writeStringField('Name',level1.Name);
                
                if(setParentCategories.contains(level1.Id)) {
                    categoryJSON.writeFieldName('SubCategories');
                    categoryJSON.writeStartArray();
                    for(Category__c level2:lstCategories) {
                        //If Level1 is parent category for any level2 categories, iterate through them
                        if(level1.Id == level2.Parent_Category__r.Id) {
                            categoryJSON.writeStartObject();
                            categoryJSON.writeStringField('Id',level2.Id);
                            categoryJSON.writeStringField('Name',level2.Name);
                            
                            //If level2 category has level3 SubCategories, iterate through them
                            if(level2.SubCategories__r != null) {
                                categoryJSON.writeFieldName('SubCategories');
                                categoryJSON.writeStartArray();
                                for(category__c level3:level2.SubCategories__r) {
                                    categoryJSON.writeStartObject();
                                    categoryJSON.writeStringField('Id',level3.Id);
                                    categoryJSON.writeStringField('Name',level3.Name);
                                    categoryJSON.writeEndObject();
                                }
                                categoryJSON.writeEndArray();
                            }
                            categoryJSON.writeEndObject();
                        }
                    }
                    categoryJSON.writeEndArray();
                    categoryJSON.writeEndObject();
                }                
            }
        }
        categoryJSON.writeEndArray();
        categoryJSON.writeEndObject();
        //Convert to JSON String
        String strCategoryJSON = categoryJSON.getAsString();
        return strCategoryJSON;
    }
}

目标JSON格式:

{
    "Categories":[
    {
        "Id":"5",
        "Name":"Category5",
        "SubCategories":[
            {
                "Id":"51",
                "Name":"Cat5Sub1",
                "SubCategories":[
                    {
                        "Id":"511",
                        "Name":"Cat5Sub1Sub1"
                    },
                    {
                        "Id":"512",
                        "Name":"Cat5Sub1Sub1"
                    }
                ]
            },
            {
                "Id":"32",
                "Name":"Cat5Sub2",
                "SubCategories":[
                    {
                        "Id":"511",
                        "Name":"Cat5Sub1Sub2"
                    },
                    {
                        "Id":"512",
                        "Name":"Cat5Sub1Sub2"
                    }
                ]
            },
            {
                "Id":"33",
                "Name":"Cat5Sub3"
            }
        ]
    }
]
}

0 个答案:

没有答案