2015-02-27 6 views
0

Я генерация некоторых JS выхода со следующим кодом:выходного ответа правильного JSON

generator = JSON.createGenerator(true); 
    generator.writeStartObject(); 
    generator.writeFieldName('employees'); 
    generator.writeStartArray(); 
    for(User u : getUsers()) { 
     generator.writeStartObject(); 
     generator.writeStringField('key', u.Id); 
     generator.writeStringField('nickname', u.CommunityNickname); 
     generator.writeStringField('lastname', u.LastName); 
     if(u.Region__c != null) { 
      generator.writeStringField('region', u.Region__c); 
     } 
     else { 
      generator.writeStringField('region', ''); 
     } 
     if(u.Home_District__c != null) { 
      generator.writeStringField('district', u.Home_District__c); 
     } 
     else { 
      generator.writeStringField('district', ''); 
     } 
     if(u.Home_District__c != null) { 
      generator.writeStringField('pack', u.Pack__c); 
     } 
     else { 
      generator.writeStringField('pack', ''); 
     } 
     generator.writeStringField('employee', u.Name); 
     generator.writeEndObject(); 
    } 
    generator.writeEndArray(); 
    generator.writeFieldName('events'); 
    generator.writeStartArray(); 
    for(Site_Visit__c sv : getSiteVisits()) { 
     generator.writeStartObject(); 
     if(sv.Status__c.toLowercase() == 'scheduled') { 
      generator.writeFieldName('assigned'); 
      generator.writeStartObject(); 
      if(sv.Intended_Start_Date_Time__c != null) generator.writeStringField('start_date', String.valueOf(sv.Intended_Start_Date_Time__c));  
      if(sv.Estimated_Completion_Date_Time__c != null) generator.writeStringField('end_date', String.valueOf(sv.Estimated_Completion_Date_Time__c)); 
      generator.writeStringField('text', String.valueOf(sv.Name)); 
      if(sv.Assigned_Employee__c != null) generator.writeStringField('section_id', String.valueOf(sv.Assigned_Employee__c)); 
      generator.writeStringField('id', String.valueOf(sv.Id)); 
      generator.writeStringField('color', String.valueOf('#ffffff')); 
      generator.writeStringField('textColor', String.valueOf('#000000')); 
      generator.writeEndObject(); 
     } 
     if(sv.Status__c.toLowercase() == 'unassigned') { 
      generator.writeFieldName('unassigned'); 
      generator.writeStartObject(); 
      if(sv.Intended_Start_Date_Time__c != null) generator.writeStringField('start_date', String.valueOf(sv.Intended_Start_Date_Time__c));  
      if(sv.Estimated_Completion_Date_Time__c != null) generator.writeStringField('end_date', String.valueOf(sv.Estimated_Completion_Date_Time__c)); 
      generator.writeStringField('text', String.valueOf(sv.Name)); 
      generator.writeStringField('id', String.valueOf(sv.Id)); 
      generator.writeStringField('color', String.valueOf('#ffffff')); 
      generator.writeStringField('textColor', String.valueOf('#000000')); 
      generator.writeStringField('woNumber', String.valueOf(sv.Work_Order__r.Name)); 
      generator.writeStringField('woType', String.valueOf(sv.Work_Order__r.Work_Order_Type__c)); 
      generator.writeStringField('customer', String.valueOf(sv.Work_Order__r.Customer__c)); 
      generator.writeEndObject();    
     } 
     generator.writeEndObject(); 
    } 
    generator.writeEndArray(); 
    generator.writeEndObject(); 

Токовый выходу, как в следующем:

{ 
employees: 
    employee 
    employee 
events: 
    unassigned: 
     event 
    unassigned: 
     event 
    assigned: 
     event 
    assigned: 
     event 
    (empty object?) 
    (empty object?) 
} 

мне нужно, чтобы это было так:

{ 
employees: 
    employee 
    employee 
events: 
    unassigned: 
     event 
     event 
    assigned: 
     event 
     event 
} 

События - это объект (а не массив), который имеет два поля: назначенные и неназначенные. Каждое из этих полей представляет собой массив событий, соответствующих их описанию.

Спасибо за любую помощь.

+1

Это похоже на Java. Вы должны добавить тег java. – Antzi

+1

@Antzi это недопустимый код Java. Обратите внимание на строки с одной кавычкой. Либо это, либо они были заменены каким-то образом ... – Obicere

+0

Это не java, это вершина, которая является производным от java. – Dman100

ответ

0

Глядя на ваш фрагмент Я не понимаю, почему вам нужно использовать генераторы JSON на вершине, когда вы можете просто использовать serialize() method.

Поскольку вы используете несколько объектов, я бы создал пользовательский внутренний класс и построил список этих и сериализовал их.

public MyInnerClass(User u, Site_Visit__c s){ 
    String userName = u.Name; 
    String siteName = s.Name; 
} 


List<MyOuterClass.MyInnerClass> customInnerClass = new List<MyOuterClass.MyInnerClass>(); 

//add my inner class objects made up of properties from all my sobjects 

customInnerClass.serialize(); 
//This will be a well formed JSON object for any API or JS Framework. 
Смежные вопросы