2016-08-07 6 views
7

अंडरस्कोर के साथ जेसन को ऊंट के मामले के साथ जावा ऑब्जेक्ट्स को क्रमबद्ध करने के लिए हम PropertyNamingStrategySNAKE_CASE के रूप में उपयोग करते हैं।जैक्सन का उपयोग कर जावा में ऊंट के मामले में अंडरस्कोर के साथ जेएसओएन deserialising?

तो, इसके विपरीत कुछ करने के लिए भी कुछ है। यही है, ऊंट के साथ जावा ऑब्जेक्ट्स के अंडरस्कोर के साथ deserialise जेसन।

उदाहरण के लिए, JSON:

{ 
    "user_id": "213sdadl" 
    "channel_id": "asd213l" 
} 

इस जावा वस्तु को deserialised किया जाना चाहिए:

public class User { 
    String userId; // should have value "213sdadl" 
    String channelId; // should have value "asd213l" 
} 

मैं one way of doing this जो @JsonProperty एनोटेशन जो जमीनी स्तर पर काम करता है के माध्यम से है। मुझे इसके लिए कोई वैश्विक सेटिंग जानने में दिलचस्पी है।

+1

@JLewkovich यह isn बिल्कुल एक डुप्लिकेट नहीं है। कृपया प्रश्न की अंतिम पंक्ति पढ़ें। मैं '@ जेसनप्रोपर्टी 'एनोटेशन के बारे में बात नहीं कर रहा हूं जो स्वीकार्य उत्तर है। –

+0

असल में संदर्भित प्रश्न में एक उत्तर है जिसमें आप शायद रुचि रखते थे, उच्चतम उत्थान वाले – Quadrat137

+0

@ Quadrat137 पर देखो, मैंने जवाब देखा है, आप उत्तर के नीचे मेरी टिप्पणियां भी देख सकते हैं। यह मेरे लिए दोनों तरीकों से काम नहीं करता था। यह मेरा सवाल था। –

उत्तर

4

वैसे आप कि कुछ इस तरह दिखता PropertyNamingStrategy के लिए क्रियान्वयन हो सकता है:

import org.codehaus.jackson.map.MapperConfig; 
import org.codehaus.jackson.map.PropertyNamingStrategy; 
import org.codehaus.jackson.map.introspect.AnnotatedField; 
import org.codehaus.jackson.map.introspect.AnnotatedMethod; 

public class CustomNameStrategy extends PropertyNamingStrategy 
{ 
    @Override 
    public String nameForField(MapperConfig 
         config, 
    AnnotatedField field, String defaultName) { 
    return convert(defaultName); 

    } 
    @Override 
    public String nameForGetterMethod(MapperConfig 
         config, 
    AnnotatedMethod method, String defaultName) { 
    return convert(defaultName); 
    } 

    @Override 
    public String nameForSetterMethod(MapperConfig 
         config, 
    AnnotatedMethod method, String defaultName) { 
    String a = convert(defaultName); 
    return a; 
    } 

    public String convert(String defaultName) 
    { 
    char[] arr = defaultName.toCharArray(); 
    StringBuilder nameToReturn = new StringBuilder(); 

    for(int i=0; i< arr.length(); i++){ 
     if(arr[i] == '_'){ 
     nameToReturn.append(Character.toUpperCase(arr[i+1])); 
     i++; 
     }else{ 
     nameToReturn.append(arr[i]); 
     } 
    } 
    return nameToReturn.toString(); 
    } 

} 
तो अपने कार्यान्वयन में

या वर्ग desrialization आप कर सकते हैं यह है कि:

ObjectMapper mapper = new ObjectMapper(); 
mapper.setPropertyNamingStrategy(new CustomNameStrategy()); 
YourClass yourClass = mapper.readValue(yourJsonString, YourClass.class); 
+0

मैं इस जवाब को स्वीकार कर रहा हूं क्योंकि यह अब तक का एकमात्र समाधान है और मुझे लगता है कि ऐसा करने का कोई और साफ तरीका नहीं है। –

संबंधित मुद्दे