Friday, 9 August 2013

JSON Generator

JSONGenerator:
Since the JSON encoding that's generated by Apex through the serialization method in the System.JSON class isn't identical to the standard JSON encoding in some cases, the System.JSONGenerator class is provided to enable the generation of standard JSON-encoded content.
JSONGenerator Methods:
The following are instance methods of the System.JSONGenerator class.
Method
Description
close
Closes the JSON generator.No more content can be written after the JSON generator is closed.
getAsString
Returns the generated JSON content.
Also, this method closes the JSON generator if it isn't closed already.
isClosed
Returns true if the JSON generator is closed; otherwise, returns false.
writeBlob
Writes the specified Blob value as a base64-encoded string.
writeBlobField
Writes a field name and value pair using the specified field name and BLOB value.
writeBoolean
Writes the specified Boolean value.
writeBooleanField
Writes a field name and value pair using the specified field name and Boolean value.
writeDate
Writes the specified date value in the ISO-8601 format.
writeDateField
Writes a field name and value pair using the specified field name and date value. The date value is written in the ISO-8601 format.
writeDateTime
Writes the specified date and time value in the ISO-8601 format.
writeDateTimeField
Writes a field name and value pair using the specified field name and date and time value. The date and time value is written in the ISO-8601 format.
writeEndArray
Writes the ending marker of a JSON array (']').
writeEndObject
Writes the ending marker of a JSON object ('}').
writeFieldName
Writes a field name.
writeId
Writes the specified ID value.
writeIdField
Writes a field name and value pair using the specified field name and identifier value.
writeNull
Writes the JSON null literal value
writeNullField
Writes a field name and value pair using the specified field name and the JSON null literal value.
writeNumber
Writes the specified decimal value.
writeNumber
Writes the specified double value.
writeNumber
Writes the specified integer value.
writeNumber
Writes the specified long value.
writeNumberField

Writes a field name and value pair using the specified field name and decimal value.
writeNumberField
Writes a field name and value pair using the specified field name and double value.
writeNumberField
Writes a field name and value pair using the specified field name and integer value.
writeNumberField
Writes a field name and value pair using the specified field name and long value.
writeObject
Writes the specified Apex object in JSON format
writeObjectField
Writes a field name and value pair using the specified field name and Apex object.
writeStartArray
Writes the starting marker of a JSON array ('[').
writeStartObject
Writes the starting marker of a JSON object ('{').
writeString
Writes the specified string value.
writeStringField
Writes a field name and value pair using the specified field name and string value.
writeTime
Writes the specified time value in the ISO-8601 format.
writeTimeField
Writes a field name and value pair using the specified field name and time value in the ISO-8601 format.
Simple Example for JSONGenerator
JSONGenerator gen=JSON.createGenerator(true);
gen.writeStartObject(); //It is used for making starting object(‘{‘)
gen.writeStringField('Summary','Hyderabad');//Here it is used for making name ,value pair
gen.writeEndObject();//It is used for making end of object(‘}’)
System.debug('getAsString:'+gen.getAsString());

Output:
{
  "Summary" : "Hyderabad"
}
Example 2:
public  class GoogleCalendarEvent {
     public String id;
     public String htmlLink;
     public DateTime created;
     public String summary;
     public String description;
     public String location;
     public Integer sequence;
     public List<GoogleEventAttendee> attendees;
     public GoogleCalendarEvent(){
          this.id='EMP103';
          this.htmlLink='www.google.com';
          this.created=System.now();
          this.summary='Hi this is Balaji Malemarpuram';
          this.description='Hello Have a nice day';
          this.location='Hyderabad';
          this.sequence=2;
          attendees=new List<GoogleEventAttendee>();
          GoogleEventAttendee attend=new GoogleEventAttendee();
          attend.email='mbalaji105@gmail.com';
          attend.additionalGuests=10;
          attend.optional=true;
          attendees.add(attend);
          GoogleEventAttendee attend1=new GoogleEventAttendee();
          attend1.email='Sreevalli@gmail.com';
          attend1.additionalGuests=20;
          attend1.optional=true;
          attendees.add(attend1);
         
     }
     public Class GoogleEventAttendee{
      public String email;
      public boolean optional;
      public integer additionalGuests;
     }
     public  void generateJson(){
          JSONGenerator gen = JSON.createGenerator(true);
          gen.writeStartObject();
          gen.writeStringField('id',this.id);
          gen.writeDateTimeField('Created',this.created);
          gen.writeStringField('Summary',this.summary);
          gen.writeStringField('Description',this.description);
          gen.writeStringField('Location',this.location);
          gen.writeNumberField('Sequence',this.sequence);     
          gen.writeFieldName('attendees');
          gen.writeStartArray();
          //for each attendee create a JSON object
          for(GoogleEventAttendee gEventAttendee: this.attendees){
              gen.writeStartObject();
              gen.writeStringField('email', gEventAttendee.email);            
              gen.writeBooleanField('optional', gEventAttendee.optional);
              gen.writeNumberField('additionalGuests', gEventAttendee.additionalGuests);
              gen.writeEndObject();
          }
          gen.writeEndArray();
          gen.writeEndObject();
          //end of the parent JSON object  
          String jsonString = gen.getAsString();
          System.debug('jsonString:'+jsonString);
     }
}
Output:

{
  "id" : "EMP103",
  "Created" : "2013-06-13T08:59:44.949Z",
  "Summary" : "Hi this is Balaji Malemarpuram",
  "Description" : "Hello Have a nice day",
  "Location" : "Hyderabad",
  "Sequence" : 2,
  "attendees" : [ {
    "email" : "mbalaji105@gmail.com",
    "optional" : true,
    "additionalGuests" : 10
  }, {
    "email" : "Sreevalli@gmail.com",
    "optional" : true,
    "additionalGuests" : 20
  } ]
}

Example 3:

public  class JsonstringgeneratefromAccountdata {
     public void jsongenerate(){
          JSONGenerator gen = JSON.createGenerator(true);
          gen.writeString('Account Data');
          gen.writeStartArray();
          for(Account actobj:[select id,name,type,Industry from Account limit 2]){
              gen.writeStartObject();
                   gen.writeStringField('Account Name',actobj.Name);
                   gen.writeStringField('Account Type',actobj.Type);
                   gen.writeStringField('Industry',actobj.Industry);
              gen.writeEndObject();
          }
          gen.writeEndArray();
          System.debug('Json Account Structure:'+gen.getAsString());
     }
}
Output:
"Account Data" [ {
"Account  Name" : "ABCFoundation",
"Account  Type" : "Other",
"Industry" : "Engineering"
 } ,
 {
"Account  Name" : "CDEFoundation",
"Account  Type" : "Other",
"Industry" : "Agriculture"
 } ]


11 comments:

  1. Thank you nice post balaji

    ReplyDelete
  2. is it the output of the 3rd example the same as the 2nd one or am I wrong? :S

    ReplyDelete
  3. It should not be . I updated correct one. Thank you.

    ReplyDelete
  4. Hi, I have multiple Sobject Data in json file, Now i want to upload this data into particular objects in a single transaction.
    Is it possible, can you please explain this deaply.

    ReplyDelete
    Replies
    1. Yes you can update this data into particular objects. Based on your json string you can generate class also through that you can do anything in single transaction. Look into the post below.
      http://salesforce-walker.blogspot.de/2014/12/generation-of-json-string-deserialize.html

      Delete
  5. Really nice blog post.provided a helpful information.I hope that you will post more updates like this Ruby on rails Online Course Hyderabad

    ReplyDelete
  6. "Name: Ketan
    Address: Ahmedabad
    State: Gujarat
    City: Pune"

    This is my object rich Textarea field. how can i convert into JSON String

    ReplyDelete
  7. I definitely enjoying every little bit of it and I have you bookmarked to check out new stuff you post. best generator for travel trailer

    ReplyDelete
  8. You might comment on the order system of the blog. You should chat it's splendid. Your blog audit would swell up your visitors. I was very pleased to find this site.I wanted to thank you for this great read!! best generator for travel trailer

    ReplyDelete

Best Practices for Building Prompt Templates

 Hi, The following best practices should be considered when building prompt templates: Make sure that your prompt templates are concise and ...