当前位置: 首页 > 面试题库 >

Jackson-Java bean到JSON字符串:大写变量在JSON中转换为小写

麹正业
2023-03-14
问题内容

我正在使用ObjectMapper的writeValueAsString方法将Java bean转换为JSON字符串,其中Java
bean中的大写变量被更改为JSON字符串中的小写字母。实施了Jackson 2.7.4版本。菜豆样品-

public class BaseBean {

private static final long serialVersionUID = 3947489072259877540L;

private int _iXId;
private String _sPNR;
private ArrayList _alMinPriced = new ArrayList<TermBean>();

public int getXId() {
    return _iXId;
}

public void setXId(int id) {
    _iXId = id;
}

public String getPNRNumber() {
    return _sPNR;
}

public void setPNRNumber(String _spnr) {
    _sPNR = _spnr;
}

public ArrayList getMinPriced() {
    return _alMinPriced;
}

public void setMinPriced(ArrayList minPriced) {
    _alMinPriced = minPriced;
}

public void setMinPriced(TermBean bnTerm) {
    _alMinPriced.add(bnTerm);
}

}

之前,我们使用net.sf.json.JSON和JSONSerializer将Java bean转换为JSON。生成的JSON字符串与我们使用的Java
bean具有相似的命名。由于性能问题,我想对此进行更改并实施Jackson。

限制:我们无法更改Java
bean的命名约定,因为这些bean来自较旧的项目,并且几乎没有范围来更改bean中的变量名,甚至在每个bean中添加json属性。

我已经尝试了下面的代码,但是没有用

ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE);

另外,我尝试了自定义的PropertyNamingStrategy,但对此还不清楚。

编辑:

net.sf.json.JSON 生成了上述Bean的JSON字符串,如下所述:

{"XId":11,"PNRNumber":"123456789","minPriced":[{"name":"JSON"},{"name":"simple"}]}

Jackson 为上述bean生成了JSON字符串,如下所述:

{"xid":11,"pnrnumber":"123456789","minPriced":[{"name":"JSON"},{"name":"Jackson"}]}

如您所见,在jackson中,“ XId”转换为“ xid”,在jackson中,“ PNRNumber”转换为“ pnrnumber”。

Jackson中是否有任何可用的配置更改来避免此类修改。或如何处理这种情况。


问题答案:

使用了以下罐子:

  1. 杰克逊核心2.7.4.jar
  2. 杰克逊注释2.7.4.jar
  3. jackson-databind-2.7.4.jar

步骤1:请按以下方式编写以下Mixin:

import java.util.ArrayList;
import com.fasterxml.jackson.annotation.JsonProperty;

public abstract class MixIn {
    @JsonProperty("PNRNumber")
    abstract String getPNRNumber();

    @JsonProperty("XId")
    abstract int getXId();

    @JsonProperty("minPriced")
    abstract ArrayList getMinPriced();
}

步骤2:请按照以下步骤编写模块:

import com.fasterxml.jackson.databind.module.SimpleModule;

public class MyModule extends SimpleModule{
  public MyModule() {
    super("ModuleName");
  }
  @Override
  public void setupModule(SetupContext context){
    context.setMixInAnnotations(BaseBean.class, MixIn.class);   
  }
}

步骤3:现在是时候获取json String了,如下所示:

TermBean bean1=new TermBean("JSON");
TermBean bean2=new TermBean("simple");
ArrayList list=new ArrayList();
        list.add(bean1);
        list.add(bean2);
BaseBean bb=new BaseBean();
        bb.setXId(11);
        bb.setPNRNumber("123456789");
        bb.setMinPriced(list);

ObjectMapper mapper = new ObjectMapper();
Module myModule = new MyModule();
mapper.registerModule(myModule);        
String jsonInString = mapper.writeValueAsString(bb);      
System.out.printf( "JSON: %s", jsonInString );

输出:

JSON:{“ XId”:11,“ PNRNumber”:“ 123456789”,“ minPriced”:[{“ name”:“ JSON”},{“
name”:“ simple”}]}}

希望这可以帮助。



 类似资料:
  • 问题内容: 是否有快速功能将通过接收到的JSON对象转换为字符串变量转储(用于跟踪/调试)? 问题答案: 是的,可以在此处找到,它包含在Firefox 3.5.4及更高版本中。 JSON字符串反方向,将JavaScript数据结构转换为JSON文本。 JSON不支持循环数据结构,因此请注意不要将循环结构提供给JSON字符串化器。 https://web.archive.org/web/201006

  • 我想将map转换为json,但使用jackson更改大小写。例如,我有这个地图: 我想将其转换为 json,但从下划线大小写更改为较低的驼峰大小写。我该怎么做?使用这个没有帮助:

  • Python 中,为了方便对字符串中的字母进行大小写转换,字符串变量提供了 3 种方法,分别是 title()、lower() 和 upper()。 Python title()方法 title() 方法用于将字符串中每个单词的首字母转为大写,其他字母全部转为小写,转换完成后,此方法会返回转换得到的字符串。如果字符串中没有需要被转换的字符,此方法会将字符串原封不动地返回。 title() 方法的语

  • String 类的 toLowerCase() 方法可以将字符串中的所有字符全部转换成小写,而非字母的字符不受影响。语法格式如下: toUpperCase() 则将字符串中的所有字符全部转换成大写,而非字母的字符不受影响。语法格式如下: 例如: 例 1 下面的实例代码演示了如何对字符串应用大写和小写转换。 代码比较简单,运行后的输出结果如下:

  • Python3 实例 以下代码演示了如何将字符串转换为大写字母,或者将字符串转为小写字母等: # Filename : test.py # author by : www.runoob.com str = "www.runoob.com" print(str.upper()) # 把所有字符中的小写字母转换成大写字母 print(str.lower()) #

  • 在Java中如何将snake case转换为camel case? 输入:“输入蛇的情况” 输出:"InputInSnakeCase"