【问题标题】:taglib json create object from arraytaglib json 从数组创建对象
【发布时间】:2012-11-15 15:57:22
【问题描述】:

我在我的 jsp 项目中使用 json taglib。目前我正在使用以下代码构建我的 json 对象:

<json:object prettyPrint="true">
    <json:array name="categories" var="cat" items="${categories}">
        <json:object>
            <json:property name="id" value="${cat.getId()}" />
            <json:array name="languages" var="lang" items="${cat.getCategorieslanguageses()}">
                <json:object>
                    <json:property name="${lang.getLanguages().getShortname()}" value="${lang.getValue()}" />
                </json:object>
            </json:array>
        </json:object>
    </json:array>
</json:object>

getCategorieslanguageses() 返回一个语言数组。 此代码给出以下输出:

{"categories": [
  {
    "id": 3,
    "languages": [
      {"nl": "Vlees"},
      {"eng": "Meat"}
    ]
  },
  {
    "id": 2,
    "languages": [
      {"eng": "Fish"},
      {"nl": "Vis"}
    ]
  }
]}

所以,这段代码效果很好,但我更喜欢的输出是:

{
    "categories": [
        {
            "id": 2,
            "languages": [
                {
                    "nl": "Vis",
                    "eng": "Fish"
                }
            ]
        },
        {
            "id": 3,
            "languages": [
                {
                    "eng": "Meat",
                    "nl": "Vlees"
                }
            ]
        }
    ]
}

谁能帮我用 taglib json 创建这个输出? 谢谢。

【问题讨论】:

    标签: java json jsp taglib


    【解决方案1】:

    这样做的方法很少。

    1. 在每个json:objectjson:array 处设置prettyPrint="true"

    2. 通过将页面、请求、会话或应用程序属性 atg.taglib.json.prettyPrint 设置为 true 或 false。

    3. 通过在您的网络应用的 web.xml 文件中设置上下文参数。

    http://json-taglib.sourceforge.net/tutorial.html

    编辑:起初我以为你是在格式化输出之后。

    "languages": [
          {"eng": "Fish"},
          {"nl": "Vis"}
        ]
    

    对此的解释是,你有一个名为languages的数组,在这个数组中包含两个对象,第一个对象有一个名为eng的属性,值为Fish。第二个对象有一个名为n1 的属性,其值为Fish

    "languages": [
                    {
                        "eng": "Meat",
                        "nl": "Vlees"
                    }
                ]
    

    对此的解释是,你有一个名为languages 的数组,而这个数组中只包含一个对象。该对象有两个属性,一个名为eng,值为Meat,另一个名为n1,值为Vlees

    只是好奇,不应该

    <json:property name="${lang.getLanguages().getShortname()}" value="${lang.getValue()}" />
    

    <json:property name="${lang.getLanguages().getShortname()}" value="${lang.getLanguages().getValue()}" />
    

    【讨论】:

    • 这不是我想要的。在第一个结果中,语言是具有每个属性的不同对象。在第二个结果中,语言是一组属性。我想创建第二个结果。
    • 是否可以使用 taglib json 和我提供的代码创建第二个输出?
    • 不,lang 包含不同语言的字符串,getlanguages() 获取有关语言的所有信息(名称、短名称、..)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    相关资源
    最近更新 更多