Controllers shouldn't know about JSON structure—that's a serialization concern. ActiveModel::Serializers (AMS) separates presentation from business logic by defining dedicated serializer classes for each model. Serializers specify exactly which attributes to expose and handle nested associations cleanly. I can create different serializers for different contexts (list view vs detail view) without cluttering controllers. The if: option conditionally includes fields based on permissions or feature flags. AMS also supports meta attributes and links for JSONAPI-compliant responses. For high-performance APIs, I sometimes use simpler solutions like Jbuilder or custom PORO serializers, but AMS provides good defaults with minimal boilerplate for standard REST APIs.