从 JSON 创建动态对象时面临的问题

Posted

技术标签:

【中文标题】从 JSON 创建动态对象时面临的问题【英文标题】:Facing issue in creating dynamic objects from JSON 【发布时间】:2017-08-22 07:46:01 【问题描述】:

我正在研究用户可以从生产框中获取数据并将其插入开发人员沙箱的要求,只需提供生产 URL 和凭据。我能够获取数据,但不知何故无法将 JSON 转换为所需的对象类型。由于我是 Salesforce 的新手,请不要介意基本问题。

下面是工作逻辑和问题:

for(DataMigrationNAP__c d : dataMigrationNAP) // this loop will give all NAP object names and its corresponding fields like 'Account','Name,Phone,Id','Opportunity', 'ID,Name, blah,blah'...
         
    final PageReference theUrl = new PageReference(SERVER_URL + '/services/data/v22.0/query/');
            String soql = 'Select '+d.NAPObjectFields__c+' From '+d.Name+' a limit ' + recordCount;
            theUrl.getParameters().put('q',soql);
            request = new HttpRequest();
            request.setEndpoint(theUrl.getUrl());
            request.setMethod('GET');
            request.setHeader('Authorization', 'OAuth ' + SESSION_ID);
            String body = (new Http()).send(request).getBody();
            JSONParser parser = JSON.createParser(body);

            do
                parser.nextToken();
            while(parser.hasCurrentToken() && !'records'.equals(parser.getCurrentName()));
            parser.nextToken();

            String typeName = 'List<' + d.Name + '>';
            Type t  = Type.forName(typeName);
            List<sobject> acc1 = (List<sobject>) parser.readValueAs(t);
            insert acc1;
            System.debug('Values inserted : ' + acc1);
        

通过上述逻辑,我试图逐个对象获取数据对象并将其插入到开发沙箱中,我能够以 JSON 格式完美获取数据,但无法从 JSON 转换为所需对象。问题是我无法硬编码对象或类型名称,因为它将是对象列表。如果您需要任何其他详细信息,请告诉我,并提前致谢。也可以使用任何其他方法,但它应该只通过顶点编码。

【问题讨论】:

你为什么要反序列化soql请求字符串而不是body变量? 抱歉我的错误,我正在尝试其他方法,正在更新代码 @AlexPashkin 现在请看一下,如果我在最后第三行从 List 修改 List ,则上面的代码正在工作, List acc1 = (List) 解析器.readValueAs(t); 最好使用 upsert 方法而不是 insert 是的 @AlexPashkin 与 upsert 一起使用,并且在 upsert 之前将 sobject 转换为特定对象的小变化。谢谢 【参考方案1】:

您是否已经尝试过JSON2Apex,如果没有,这可能是不错的选择。

【讨论】:

以上是关于从 JSON 创建动态对象时面临的问题的主要内容,如果未能解决你的问题,请参考以下文章

从 json 动态创建的 Javascript 表单输入,需要将对象映射到另一个对象的正确字段并保存

Angular 5中json对象的动态嵌套材质菜单

从配置单元中的 JSON 数组获取 JSON 密钥时面临的问题

如何在 Java Android App 中使用从 Webserver 检索到的 JSON 来动态创建和使用对象

如何创建动态 html 表单的 JSON 对象(表单元素)?

从 JSON 使用 Javascript 创建动态关联数组