function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
DeepikareddyDeepikareddy 

How to bind the json values to the Selectlist

public class test5 {

  public list<string> lststatename{get;set;}
  public list<string> lstrating{get;set;}
  
  public list<string> lstactive{get;set;}
  public map<string, string> statemap{get;set;}

public map<string, string> activestatusmap{get;set;}

 public set<string> mapkey{get;set;}
 
    public list<string> mapvalue{get;set;}
 public test5(){
 
 
    string  jsonexample1 =  ' { "overalldata": [ {"stateName": "Andrapradesh",  "rating": "5.0" , "active": "yes" }, { "stateName": "Telangana",  "rating": "4.0" ,"active": "no" }, {"stateName": "Banglore",  "rating": "5.0" ,"active": "no"} , {"stateName": "Maharastra",  "rating": "4.5" ,"active": "no" }  ] } ';

   
     map<string,object>  metadatamap= (map<string,object>)json.deserializeuntyped(jsonexample1); 
     
      list<object>  values1= (list<object>)metadatamap.get('overalldata');
        
        
         lststatename= new list<string>();
         lstrating= new list<string>();
         statemap= new map<String, string>();
         
          for(object parsed : values1){
          map<string,object>  values = (map<string,object>)parsed;
          string statename = string.valueof(values.get('stateName'));
          
          string rating= string.valueof(values.get('rating'));
          
          lststatename.add(statename);
             
          lstrating.add(rating);
             
             statemap.put(statename,rating);
             
             }
            
 }
}
Visual force page:
 
<apex:page controller="test5" >

 <apex:form >
   <apex:repeat value="{!statemap}" var="a">
    <apex:selectList >   
               <apex:selectOptions value="{!a}">{!a}</apex:selectOptions>
         </apex:selectList>
   
   </apex:repeat>
            
                                          
      
 
 </apex:form>
 
</apex:page>

Hi..! can any body bind data to the selectlist with statename as itemlabel and rating  as the itemvalue in visualforce page
.. Thank you..!
Best Answer chosen by Deepikareddy
Soyab HussainSoyab Hussain
Hi Deepika,

Use this code this will help you.

Apex Class:
public class test5 {     
    public list<string> lststatename{get;set;}
    public list<string> lstrating{get;set;} 
    public list<string> lstactive{get;set;}
    public map<string, string> statemap{get;set;}   
    public map<string, string> statemapCopy{get;set;}   
    public map<string, string> activestatusmap{get;set;}     
    public set<string> mapkey{get;set;} 
    public list<string> mapvalue{get;set;}
    public string selectedOption{get;set;} 
    public string displymessage{get;set;}
    public test5(){ 
        string  jsonexample1 =  ' { "overalldata": [ {"stateName": "Andrapradesh",  "rating": "5.0" , "active": "yes" }, { "stateName": "Telangana",  "rating": "4.0" ,"active": "no" }, {"stateName": "Banglore",  "rating": "5.0" ,"active": "no"} , {"stateName": "Maharastra",  "rating": "4.5" ,"active": "no" }  ] } ';
        map<string,object>  metadatamap= (map<string,object>)json.deserializeuntyped(jsonexample1); 
        list<object>  values1= (list<object>)metadatamap.get('overalldata'); 
        lststatename= new list<string>();
        lstrating= new list<string>();
        statemap= new map<String, string>();
        statemapCopy = new map<String, string>();
        for(object parsed : values1){ 
            map<string,object>  values = (map<string,object>)parsed;
            string statename = string.valueof(values.get('stateName')); 
            string rating= string.valueof(values.get('rating')); 
            lststatename.add(statename); 
            lstrating.add(rating); 
            statemap.put(statename ,   rating); 
            statemapCopy.put(rating, statename);
        }
        
    }
    
    public void showmessage(){  
        displymessage = 'you have selected :'+statemapCopy.get(selectedOption)+' the value of the selected name is '+selectedOption;
    }
}

VisualForce Page:
 
<apex:page controller="test5" > 
    <apex:form > 
        <apex:selectList size="1" value="{!selectedOption}"  >   
            <apex:selectOptions value="{!statemap}"></apex:selectOptions>
            
            <apex:actionSupport event="onchange" action="{!showmessage}" reRender="s"/>
        </apex:selectList>  
        
        <apex:outputLabel id="s" value="{!displymessage}"></apex:outputLabel>
    </apex:form> 
</apex:page>

Regards,
Soyab
 

All Answers

Soyab HussainSoyab Hussain
Hi Deepika,

We can use selecOption List instead of Map.

Use this code this will help you.

Apex Class:
public class test5 { 
    public list<string> lststatename{get;set;}
    public list<string> lstrating{get;set;} 
    public list<string> lstactive{get;set;}
    public List<SelectOption> statemap{get;set;} 
    public map<string, string> activestatusmap{get;set;} 
    public set<string> mapkey{get;set;}     
    public list<string> mapvalue{get;set;}
    public String selectedOption {get;set;}
    public test5(){  
        string  jsonexample1 =  ' { "overalldata": [ {"stateName": "Andrapradesh",  "rating": "5.0" , "active": "yes" }, { "stateName": "Telangana",  "rating": "4.0" ,"active": "no" }, {"stateName": "Banglore",  "rating": "5.0" ,"active": "no"} , {"stateName": "Maharastra",  "rating": "4.5" ,"active": "no" }  ] } ';
        map<string,object>  metadatamap= (map<string,object>)json.deserializeuntyped(jsonexample1); 
        list<object>  values1= (list<object>)metadatamap.get('overalldata');
        lststatename= new list<string>();
        lstrating= new list<string>();
        statemap= new List<SelectOption>();
        for(object parsed : values1){
            map<string,object>  values = (map<string,object>)parsed;
            string statename = string.valueof(values.get('stateName'));
            string rating= string.valueof(values.get('rating'));
            lststatename.add(statename);
            lstrating.add(rating);
            statemap.add( new SelectOption(rating, statename));
        }
        SYstem.debug('statemap' + statemap);
    }
}

VisualForce Page:
<apex:page controller="test5" > 
    <apex:form >
        <apex:selectList size="1" value="{!selectedOption}"  >   
            <apex:selectOptions value="{!statemap}"></apex:selectOptions>
        </apex:selectList>  
    </apex:form> 
</apex:page>
If you found it useful please appreciate my efforts and mark it as the best answer.

LinkedIn:  https://www.linkedin.com/in/soyab-hussain-b380b1194/

Regards,
Soyab
 
DeepikareddyDeepikareddy
Hi.. Soya..!
The code is working fine..!thank you..! onchage it was not showing the selected value and i need the rating value too. to display.. 
public class test5 {

  public list<string> lststatename{get;set;}
  public list<string> lstrating{get;set;}
  
  public list<string> lstactive{get;set;}
  public map<string, string> statemap{get;set;}

public map<string, string> activestatusmap{get;set;}

 public set<string> mapkey{get;set;}
 
    public list<string> mapvalue{get;set;}
     public string selectedOption{get;set;}
     
      public string displymessage{get;set;}
 public test5(){
 
 
    string  jsonexample1 =  ' { "overalldata": [ {"stateName": "Andrapradesh",  "rating": "5.0" , "active": "yes" }, { "stateName": "Telangana",  "rating": "4.0" ,"active": "no" }, {"stateName": "Banglore",  "rating": "5.0" ,"active": "no"} , {"stateName": "Maharastra",  "rating": "4.5" ,"active": "no" }  ] } ';

   
     map<string,object>  metadatamap= (map<string,object>)json.deserializeuntyped(jsonexample1); 
     
      list<object>  values1= (list<object>)metadatamap.get('overalldata');
        
        
         lststatename= new list<string>();
         lstrating= new list<string>();
         statemap= new map<String, string>();
         
          for(object parsed : values1){
          map<string,object>  values = (map<string,object>)parsed;
          string statename = string.valueof(values.get('stateName'));
          
          string rating= string.valueof(values.get('rating'));
          
          lststatename.add(statename);
             
          lstrating.add(rating);
             
             statemap.put(statename,rating);
             
             }
            
 }
 
  public void showmessage(){
  
   displymessage = 'you have selected :'+selectedOption+'the value of the selected name is'+selected.keyvalue();
  }
}

Visualforce page:
<apex:page controller="test5" > 
    <apex:form >
        <apex:selectList size="1" value="{!selectedOption}"  >   
            <apex:selectOptions value="{!statemap}"></apex:selectOptions>
            
             <apex:actionSupport event="Onchange" action="{!showmessage}" reRender="s"/>
        </apex:selectList>  
        
        <apex:outputLabel id="s" value="{!displymessage}"></apex:outputLabel>
    </apex:form> 
</apex:page>

Thanks in Advance!
Deepika
 
Soyab HussainSoyab Hussain
Hi Deepika,

Use this code this will help you.

Apex Class:
public class test5 {     
    public list<string> lststatename{get;set;}
    public list<string> lstrating{get;set;} 
    public list<string> lstactive{get;set;}
    public map<string, string> statemap{get;set;}   
    public map<string, string> statemapCopy{get;set;}   
    public map<string, string> activestatusmap{get;set;}     
    public set<string> mapkey{get;set;} 
    public list<string> mapvalue{get;set;}
    public string selectedOption{get;set;} 
    public string displymessage{get;set;}
    public test5(){ 
        string  jsonexample1 =  ' { "overalldata": [ {"stateName": "Andrapradesh",  "rating": "5.0" , "active": "yes" }, { "stateName": "Telangana",  "rating": "4.0" ,"active": "no" }, {"stateName": "Banglore",  "rating": "5.0" ,"active": "no"} , {"stateName": "Maharastra",  "rating": "4.5" ,"active": "no" }  ] } ';
        map<string,object>  metadatamap= (map<string,object>)json.deserializeuntyped(jsonexample1); 
        list<object>  values1= (list<object>)metadatamap.get('overalldata'); 
        lststatename= new list<string>();
        lstrating= new list<string>();
        statemap= new map<String, string>();
        statemapCopy = new map<String, string>();
        for(object parsed : values1){ 
            map<string,object>  values = (map<string,object>)parsed;
            string statename = string.valueof(values.get('stateName')); 
            string rating= string.valueof(values.get('rating')); 
            lststatename.add(statename); 
            lstrating.add(rating); 
            statemap.put(statename ,   rating); 
            statemapCopy.put(rating, statename);
        }
        
    }
    
    public void showmessage(){  
        displymessage = 'you have selected :'+statemapCopy.get(selectedOption)+' the value of the selected name is '+selectedOption;
    }
}

VisualForce Page:
 
<apex:page controller="test5" > 
    <apex:form > 
        <apex:selectList size="1" value="{!selectedOption}"  >   
            <apex:selectOptions value="{!statemap}"></apex:selectOptions>
            
            <apex:actionSupport event="onchange" action="{!showmessage}" reRender="s"/>
        </apex:selectList>  
        
        <apex:outputLabel id="s" value="{!displymessage}"></apex:outputLabel>
    </apex:form> 
</apex:page>

Regards,
Soyab
 
This was selected as the best answer
DeepikareddyDeepikareddy
Hi.. soyab..Thank you..!